private void PopulateClassOrStruct(TypeDefinition objType) { AssemblyType asmType = AssemblyType.Unknown; //delegates are seen as Class by Cecil, but we don't handle them here if (IsDelegate(objType)) { PopulateDelegate(objType); } else if (objType.IsClass) { asmType = AssemblyType.Class; } else if (objType.IsValueType) { asmType = AssemblyType.Struct; } else if (objType.IsInterface) { asmType = AssemblyType.Interface; } AsmEntry asm = new AsmEntry(objType.Name, asmType) { CecilType = objType }; var memberItem = HandleMemberAndSignature(GetTypeName(objType), objType.Name, asm, null); PopulateClassOrStructChildren(objType, memberItem); }
private void PopulateEnum(TypeDefinition objType) { AsmEntry asm = new AsmEntry(objType.Name, AssemblyType.Enum); var memberItem = HandleMemberAndSignature(GetTypeName(objType), objType.Name, asm, null); PopulateEnumChildren(objType, memberItem); }
private void PopulateMethods(TypeDefinition cecilType, MemberItem parentItem) { foreach (var method in cecilType.Methods) { if (!m_ScanForPrivateMembers && !method.IsPublic) { continue; } if (method.IsGetter || method.IsSetter) { continue; } AssemblyType asmType = AssemblyType.Method; var methodName = method.Name; if (method.IsConstructor) { methodName = "constructor"; asmType = AssemblyType.Constructor; } else if (methodName.StartsWith("op_Implicit")) { methodName = method.ReturnType.ToString().SimplifyTypes(); asmType = AssemblyType.ImplOperator; } else if (methodName.StartsWith("op_")) { methodName = StringConvertUtils.ConvertOperatorFromAssembly(methodName).Substring(3); // Skip the op_ part asmType = AssemblyType.Operator; } string modifier = ""; if (method.IsStatic) { modifier = "static"; } var asmEntry = new AsmEntry(methodName, asmType, modifier); foreach (var param in method.Parameters) { string paramType = param.ParameterType.ToString().SimplifyTypes(); bool paramAttribute = IsParams(param); string paramModifiers = paramAttribute? "params": ""; var paramElement = new ParamElement(param.Name, paramType, paramModifiers); asmEntry.ParamList.Add(paramElement); } foreach (GenericParameter param in method.GenericParameters) { string paramType = param.GetElementType().ToString().SimplifyTypes(); asmEntry.GenericParamList.Add(paramType); } asmEntry.ReturnType = method.ReturnType.ToString().SimplifyTypes(); var signatureName = MemberNameGenerator.SignatureNameFromMethodDefinition(method); HandleMemberAndSignature(GetMemberName(method), signatureName, asmEntry, parentItem); } }
private void PopulateDelegate(TypeDefinition del) { var asmEntry = new AsmEntry(del.Name, AssemblyType.Delegate); var signatureName = MemberNameGenerator.SignatureNameFromDelegate(del); HandleMemberAndSignature(GetTypeName(del), signatureName, asmEntry, null); }
private void PopulateEnumChildren(TypeDefinition enumTypeDef, MemberItem parentItem) { foreach (var field in enumTypeDef.Fields) { if (field.Name == "value__") { continue; } AsmEntry asm = new AsmEntry(field.Name, AssemblyType.EnumValue); HandleMemberAndSignature(GetMemberName(field), field.Name, asm, parentItem); } }
private void PopulateProperties(TypeDefinition cecilType, MemberItem parentItem) { foreach (PropertyDefinition prop in cecilType.Properties) { if (!m_ScanForPrivateMembers && (prop.GetMethod != null && !prop.GetMethod.IsPublic)) { continue; } var signatureName = MemberNameGenerator.SignatureNameFromPropertyDefinition(prop); AsmEntry asm = new AsmEntry(signatureName, AssemblyType.Property) { ReturnType = prop.PropertyType.ToString().SimplifyTypes() }; HandleMemberAndSignature(GetMemberName(prop), signatureName, asm, parentItem); } }
private void PopulateFields(TypeDefinition cecilType, MemberItem parentItem) { foreach (var field in cecilType.Fields) { bool documentIt = m_ScanForPrivateMembers || (field.Attributes & FieldAttributes.Public) > 0; if (!documentIt) { continue; } AsmEntry asm = new AsmEntry(field.Name, AssemblyType.Field) { ReturnType = field.FieldType.ToString().SimplifyTypes() }; HandleMemberAndSignature(GetMemberName(field), field.Name, asm, parentItem); } }
public void AddFromAssembly(AsmEntry entry) { Asm = entry; }
private MemberItem HandleMemberAndSignature(string itemName, string signatureName, AsmEntry asmEntry, MemberItem parentItem) { asmEntry.Private = m_ScanForPrivateMembers; //HACK SPECIAL CASE if (SkipSpecialCaseMember(itemName)) { return(null); } // Create member item if not already existing if (!m_MapNameToItem.ContainsKey(itemName)) { if (!m_ScanForPrivateMembers) { m_MapNameToItem[itemName] = new MemberItem(itemName, asmEntry.EntryType); } else { return(null); } } else if (!m_ScanForPrivateMembers && !m_MapNameToItem[itemName].MultipleSignaturesPossible) { Console.WriteLine("Same member name found twice for {0} (multiple signatures should not be possible for this type)", itemName); } // Get member item MemberItem item = m_MapNameToItem[itemName]; // Create signature if (!item.ContainsSignature(signatureName)) { var sigEntry = new SignatureEntry(signatureName); sigEntry.AddFromAssembly(asmEntry); item.AddSignature(sigEntry); } else { if (!m_ScanForPrivateMembers) { Console.WriteLine("We should not see the same signature entry twice!! for {0} : {1}.", itemName, signatureName); } else { var sigEntry = item.GetSignature(signatureName, true); if (!sigEntry.InAsm) { sigEntry.AddFromAssembly(asmEntry); } } } if (item != null && parentItem != null && !parentItem.ChildMembers.Contains(item)) { parentItem.ChildMembers.Add(item); } return(item); //the item we just populated, may or may not be used }