private static AssemblyTypeData ReadType(TypeDefinition type, BaseDataContainer dir) { AssemblyTypeData typeData = new AssemblyTypeData(type.FullName, dir); foreach (var method in type.Methods) { AssemblyMethodData methodData = ReadMethod(method, typeData); if (methodData != null) { typeData.methods.Add(methodData); } } foreach (var nestedType in type.NestedTypes) { AssemblyTypeData nestedTypeData = ReadType(nestedType, dir); if (nestedTypeData != null) { typeData.nestedTypes.Add(nestedTypeData); } } if (typeData.nestedTypes.Count == 0 && typeData.methods.Count == 0) { return(null); } return(typeData); }
public static AssemblyMethodData ReadMethod(MethodDefinition method, AssemblyTypeData typeData) { if (!method.HasBody) { return(null); } AssemblyMethodData methodData = new AssemblyMethodData(method.Name, typeData); var instructions = method.Body.Instructions; for (int i = 0; i < instructions.Count; i++) { if (instructions[i].OpCode == OpCodes.Ldstr) { string text = (string)instructions[i].Operand; if (!TextFinder.TextFinder.IsValidText(text)) { continue; } AssemblyTextEntry textEntry = new AssemblyTextEntry(i, text, null, methodData); methodData.texts.Add(textEntry); } } if (methodData.texts.Count == 0) { return(null); } return(methodData); }
private void changeConentDescription(DescriptionMode descriptionMode) { componentsDescriptionMode = descriptionMode; for (int i = 0; i < asmContentTree.Items.Count; i++) { TreeViewItem typeItem = asmContentTree.Items[i] as TreeViewItem; if (typeItem.Header is AssemblyTypeData) { AssemblyTypeData type = typeItem.Header as AssemblyTypeData; type.TypeDescriptionMode = descriptionMode; typeItem.Header = null; typeItem.Header = type; } for (int j = 0; j < typeItem.Items.Count; j++) { TreeViewItem methodItem = typeItem.Items[j] as TreeViewItem; if (methodItem.Header is AssemblyMethodData) { AssemblyMethodData method = methodItem.Header as AssemblyMethodData; method.MethodDescriptionMode = descriptionMode; methodItem.Header = null; methodItem.Header = method; } } } }