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 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);
        }
Beispiel #3
0
        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;
                    }
                }
            }
        }
Beispiel #4
0
        private void LoadAssemblyTypes()
        {
            assemblyTypes.Clear();

            Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
            foreach (var assembly in assemblies)
            {
                string assemblyName = assembly.GetName().Name;
                if (genConfig.AssemblyNames.IndexOf(assemblyName) < 0)
                {
                    continue;
                }

                foreach (var type in assembly.GetTypes())
                {
                    if (type.IsNotPublic || type.IsInterface || type.IsGenericType || (!type.IsSealed && type.IsAbstract) || (type.IsNested && !type.IsNestedPublic))
                    {
                        continue;
                    }
                    AssemblyTypeData typeData = new AssemblyTypeData();
                    typeData.Type = type;
                    if (!type.IsEnum)
                    {
                        typeData.Fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static).ToList();
                        typeData.Fields.Sort((item1, item2) =>
                        {
                            return(item1.Name.CompareTo(item2.Name));
                        });

                        typeData.Properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static).ToList();
                        typeData.Properties.Sort((item1, item2) =>
                        {
                            return(item1.Name.CompareTo(item2.Name));
                        });

                        typeData.Methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static).ToList();
                        typeData.Methods.Sort((item1, item2) =>
                        {
                            return(item1.Name.CompareTo(item2.Name));
                        });
                    }
                    assemblyTypes.Add(typeData);
                }

                if (assemblyTypes.Count > 0)
                {
                    assemblyTypes.Sort((item1, item2) =>
                    {
                        return(item1.Type.FullName.CompareTo(item2.Type.FullName));
                    });
                }
            }
        }
        public static void OpenUnityGameAssembly(string projName, string path)
        {
            curModule = ModuleDefinition.ReadModule(path);

            projectData = new ProjectData(projName, path);
            Console.WriteLine("Path: " + path);
            foreach (var type in curModule.Types)
            {
                Debug.WriteLine("Type: " + type.FullName);
                AssemblyTypeData typeData = ReadType(type, projectData);
                if (typeData != null)
                {
                    projectData.AddChild(typeData);
                }
            }
        }
Beispiel #6
0
        private void addTypeContentToTree(AssemblyTypeData type)
        {
            type.TypeDescriptionMode = componentsDescriptionMode;

            if (type.TypeKeyWord == TypeKeyWords.Class)
            {
                TreeViewItem typeItem = createItem(type);
                for (int i = 0; i < type.DeclaredMethods.Length; i++)
                {
                    type.DeclaredMethods[i].MethodDescriptionMode = componentsDescriptionMode;

                    if (type.DeclaredMethods[i].AccessModifier.HasFlag(MethodAttributes.Public) ||
                        type.DeclaredMethods[i].AccessModifier.HasFlag(MethodAttributes.Family))
                    {
                        TreeViewItem methodItem = createItem(type.DeclaredMethods[i]);
                        typeItem.Items.Add(methodItem);
                    }
                }

                asmContentTree.Items.Add(typeItem);
            }
        }