in src/AutoRest.CSharp/Common/Output/Models/Types/FlattenedObjectTypeProperty.cs [139:192]
internal static string GetCombinedPropertyName(ObjectTypeProperty innerProperty, ObjectTypeProperty immediateParentProperty)
{
var immediateParentPropertyName = GetPropertyName(immediateParentProperty.Declaration);
if (innerProperty.Declaration.Type.Equals(typeof(bool)) || innerProperty.Declaration.Type.Equals(typeof(bool?)))
{
return innerProperty.Declaration.Name.Equals("Enabled", StringComparison.Ordinal) ? $"{immediateParentPropertyName}{innerProperty.Declaration.Name}" : innerProperty.Declaration.Name;
}
if (innerProperty.Declaration.Name.Equals("Id", StringComparison.Ordinal))
return $"{immediateParentPropertyName}{innerProperty.Declaration.Name}";
if (immediateParentPropertyName.EndsWith(innerProperty.Declaration.Name, StringComparison.Ordinal))
return immediateParentPropertyName;
var parentWords = immediateParentPropertyName.SplitByCamelCase();
if (immediateParentPropertyName.EndsWith("Profile", StringComparison.Ordinal) ||
immediateParentPropertyName.EndsWith("Policy", StringComparison.Ordinal) ||
immediateParentPropertyName.EndsWith("Configuration", StringComparison.Ordinal) ||
immediateParentPropertyName.EndsWith("Properties", StringComparison.Ordinal) ||
immediateParentPropertyName.EndsWith("Settings", StringComparison.Ordinal))
{
parentWords = parentWords.Take(parentWords.Count() - 1);
}
var parentWordArray = parentWords.ToArray();
var parentWordsHash = new HashSet<string>(parentWordArray);
var nameWords = innerProperty.Declaration.Name.SplitByCamelCase().ToArray();
var lastWord = string.Empty;
for (int i = 0; i < nameWords.Length; i++)
{
var word = nameWords[i];
lastWord = word;
if (parentWordsHash.Contains(word))
{
if (i == nameWords.Length - 2 && parentWordArray.Length >= 2 && word.Equals(parentWordArray[parentWordArray.Length - 2], StringComparison.Ordinal))
{
parentWords = parentWords.Take(parentWords.Count() - 2);
break;
}
{
return innerProperty.Declaration.Name;
}
}
//need to depluralize the last word and check
if (i == nameWords.Length - 1 && parentWordsHash.Contains(lastWord.ToSingular(false)))
return innerProperty.Declaration.Name;
}
immediateParentPropertyName = string.Join("", parentWords);
return $"{immediateParentPropertyName}{innerProperty.Declaration.Name}";
}