public void OnTypesRenamed() { var newTypes = new TypeDefDict(); foreach (var typeDef in types.GetValues()) { typeDef.OnTypesRenamed(); newTypes.Add(typeDef); } types = newTypes; ModuleDefMD.ResetTypeDefFindCache(); }
public void FindAllMemberRefs(ref int typeIndex) { memberRefFinder = new MemberRefFinder(); memberRefFinder.FindAll(ModuleDefMD); allMethods = new List <MethodDef>(memberRefFinder.MethodDefs.Keys); var allTypesList = new List <MTypeDef>(); foreach (var type in memberRefFinder.TypeDefs.Keys) { var typeDef = new MTypeDef(type, this, typeIndex++); types.Add(typeDef); allTypesList.Add(typeDef); typeDef.AddMembers(); } var allTypesCopy = new List <MTypeDef>(allTypesList); var typeToIndex = new Dictionary <TypeDef, int>(); for (int i = 0; i < allTypesList.Count; i++) { typeToIndex[allTypesList[i].TypeDef] = i; } foreach (var typeDef in allTypesList) { if (typeDef.TypeDef.NestedTypes == null) { continue; } foreach (var nestedTypeDef2 in typeDef.TypeDef.NestedTypes) { int index = typeToIndex[nestedTypeDef2]; var nestedTypeDef = allTypesCopy[index]; allTypesCopy[index] = null; if (nestedTypeDef == null) // Impossible { throw new ApplicationException("Nested type belongs to two or more types"); } typeDef.Add(nestedTypeDef); nestedTypeDef.NestingType = typeDef; } } }
public void Add(MTypeDef t) { types.Add(t); }