in vsintegration/src/FSharp.ProjectSystem.Base/Project/Web/CodeBehindCodeGenerator.cs [311:387]
public /*protected, but public for FSharp.Project.dll*/ void GetFieldNames(CodeClass codeClass, bool caseSensitive, bool onlyBaseClasses, int depth, int maxDepth, ref FieldDataDictionary fields)
{
if (codeClass != null && depth <= maxDepth)
{
if (!(onlyBaseClasses && depth == 0))
{
foreach (CodeElement codeElement in codeClass.Members)
{
//vsCMElement kind = codeElement.Kind; //vsCMElementVariable
CodeVariable codeVariable = codeElement as CodeVariable;
if (codeVariable != null)
{
FieldData field = new FieldData(codeClass, codeVariable, depth);
if (field != null && !string.IsNullOrEmpty(field.Name))
{
if (fields == null)
{
fields = new FieldDataDictionary(caseSensitive);
}
try
{
if (!fields.ContainsKey(field.Name))
{
fields.Add(field.Name, field);
}
}
catch
{
}
}
}
}
}
foreach (CodeElement baseCodeElement in codeClass.Bases)
{
CodeClass baseCodeClass = baseCodeElement as CodeClass;
if (baseCodeClass != null)
{
CodeElements partCodeElements = null;
CodeClass2 baseCodeClass2 = baseCodeClass as CodeClass2;
if (baseCodeClass2 != null)
{
vsCMClassKind classKind = baseCodeClass2.ClassKind;
if ((classKind | vsCMClassKind.vsCMClassKindPartialClass) == vsCMClassKind.vsCMClassKindPartialClass)
{
try
{
partCodeElements = baseCodeClass2.Parts;
}
catch
{
}
}
}
if (partCodeElements != null && partCodeElements.Count > 1)
{
foreach (CodeElement partCodeElement in partCodeElements)
{
CodeClass partCodeClass = partCodeElement as CodeClass;
if (partCodeClass != null)
{
GetFieldNames(partCodeClass, caseSensitive, onlyBaseClasses, depth + 1, maxDepth, ref fields);
}
}
}
else
{
GetFieldNames(baseCodeClass, caseSensitive, onlyBaseClasses, depth + 1, maxDepth, ref fields);
}
}
}
}
}