Exemplo n.º 1
0
        public void OnTypesRenamed()
        {
            var newTypes = new TypeDefDict();

            foreach (var typeDef in types.GetValues())
            {
                typeDef.OnTypesRenamed();
                newTypes.Add(typeDef);
            }
            types = newTypes;

            ModuleDefMD.ResetTypeDefFindCache();
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
 public void Add(MTypeDef t)
 {
     types.Add(t);
 }