private static bool IsTypeAUserExtendedScript(AssemblyDefinition assembly, TypeReference type)
        {
            bool result;

            if (type == null)
            {
                result = false;
            }
            else if (type.FullName == "System.Object")
            {
                result = false;
            }
            else
            {
                Assembly assembly2 = null;
                if (type.Scope.Name == "UnityEngine")
                {
                    assembly2 = typeof(MonoBehaviour).Assembly;
                }
                else if (type.Scope.Name == "UnityEditor")
                {
                    assembly2 = typeof(EditorWindow).Assembly;
                }
                else if (type.Scope.Name == "UnityEngine.UI")
                {
                    assembly2 = AssemblyHelper.FindLoadedAssemblyWithName("UnityEngine.UI");
                }
                if (assembly2 != null)
                {
                    string name  = (!type.IsGenericInstance) ? type.FullName : (type.Namespace + "." + type.Name);
                    Type   type2 = assembly2.GetType(name);
                    if (type2 == typeof(MonoBehaviour) || type2.IsSubclassOf(typeof(MonoBehaviour)))
                    {
                        result = true;
                        return(result);
                    }
                    if (type2 == typeof(ScriptableObject) || type2.IsSubclassOf(typeof(ScriptableObject)))
                    {
                        result = true;
                        return(result);
                    }
                    if (type2 == typeof(ScriptedImporter) || type2.IsSubclassOf(typeof(ScriptedImporter)))
                    {
                        result = true;
                        return(result);
                    }
                }
                TypeDefinition typeDefinition = null;
                try
                {
                    typeDefinition = type.Resolve();
                }
                catch (AssemblyResolutionException)
                {
                }
                result = (typeDefinition != null && AssemblyHelper.IsTypeAUserExtendedScript(assembly, typeDefinition.BaseType));
            }
            return(result);
        }
        public static void ExtractAllClassesThatAreUserExtendedScripts(string path, out string[] classNamesArray, out string[] classNameSpacesArray)
        {
            List <string>           list                    = new List <string>();
            List <string>           list2                   = new List <string>();
            ReaderParameters        readerParameters        = new ReaderParameters();
            DefaultAssemblyResolver defaultAssemblyResolver = new DefaultAssemblyResolver();

            defaultAssemblyResolver.AddSearchDirectory(Path.GetDirectoryName(path));
            BuildTargetGroup activeBuildTargetGroup = EditorUserBuildSettings.activeBuildTargetGroup;
            BuildTarget      activeBuildTarget      = EditorUserBuildSettings.activeBuildTarget;

            PrecompiledAssembly[] precompiledAssemblies = InternalEditorUtility.GetPrecompiledAssemblies(true, activeBuildTargetGroup, activeBuildTarget);
            HashSet <string>      hashSet = new HashSet <string>();

            PrecompiledAssembly[] array = precompiledAssemblies;
            for (int i = 0; i < array.Length; i++)
            {
                PrecompiledAssembly precompiledAssembly = array[i];
                hashSet.Add(Path.GetDirectoryName(precompiledAssembly.Path));
            }
            foreach (string current in hashSet)
            {
                defaultAssemblyResolver.AddSearchDirectory(current);
            }
            readerParameters.AssemblyResolver = defaultAssemblyResolver;
            AssemblyDefinition assemblyDefinition = AssemblyDefinition.ReadAssembly(path, readerParameters);

            foreach (ModuleDefinition current2 in assemblyDefinition.Modules)
            {
                foreach (TypeDefinition current3 in current2.Types)
                {
                    TypeReference baseType = current3.BaseType;
                    try
                    {
                        if (AssemblyHelper.IsTypeAUserExtendedScript(assemblyDefinition, baseType))
                        {
                            list.Add(current3.Name);
                            list2.Add(current3.Namespace);
                        }
                    }
                    catch (Exception)
                    {
                        UnityEngine.Debug.LogError(string.Concat(new string[]
                        {
                            "Failed to extract ",
                            current3.FullName,
                            " class of base type ",
                            baseType.FullName,
                            " when inspecting ",
                            path
                        }));
                    }
                }
            }
            classNamesArray      = list.ToArray();
            classNameSpacesArray = list2.ToArray();
        }