private static void CollectBlackListTypes(HashSet <TypeDefinition> typesToPreserve, IList <TypeDefinition> types, List <string> baseTypes)
 {
     if (types == null)
     {
         return;
     }
     using (IEnumerator <TypeDefinition> enumerator1 = ((IEnumerable <TypeDefinition>)types).GetEnumerator())
     {
         while (((IEnumerator)enumerator1).MoveNext())
         {
             TypeDefinition current1 = enumerator1.Current;
             if (current1 != null)
             {
                 using (List <string> .Enumerator enumerator2 = baseTypes.GetEnumerator())
                 {
                     while (enumerator2.MoveNext())
                     {
                         string current2 = enumerator2.Current;
                         if (MonoAssemblyStripping.DoesTypeEnheritFrom((TypeReference)current1, current2))
                         {
                             typesToPreserve.Add(current1);
                             break;
                         }
                     }
                 }
                 MonoAssemblyStripping.CollectBlackListTypes(typesToPreserve, (IList <TypeDefinition>)current1.get_NestedTypes(), baseTypes);
             }
         }
     }
 }
        public static string GenerateLinkXmlToPreserveDerivedTypes(string librariesFolder, RuntimeClassRegistry usedClasses)
        {
            string tempFileName = Path.GetTempFileName();

            using (TextWriter textWriter = new StreamWriter(tempFileName))
            {
                textWriter.WriteLine("<linker>");
                foreach (AssemblyDefinition current in MonoAssemblyStripping.CollectAllAssemblies(librariesFolder, usedClasses))
                {
                    if (!AssemblyHelper.IsUnityEngineModule(current))
                    {
                        HashSet <TypeDefinition> hashSet = new HashSet <TypeDefinition>();
                        MonoAssemblyStripping.CollectBlackListTypes(hashSet, current.MainModule.Types, usedClasses.GetAllManagedBaseClassesAsString());
                        if (hashSet.Count != 0)
                        {
                            textWriter.WriteLine("<assembly fullname=\"{0}\">", current.Name.Name);
                            foreach (TypeDefinition current2 in hashSet)
                            {
                                textWriter.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", current2.FullName);
                            }
                            textWriter.WriteLine("</assembly>");
                        }
                    }
                }
                textWriter.WriteLine("</linker>");
            }
            return(tempFileName);
        }
        private static void GenerateBlackListTypeXML(TextWriter w, IList <TypeDefinition> types, List <string> baseTypes)
        {
            HashSet <TypeDefinition> hashSet = new HashSet <TypeDefinition>();

            MonoAssemblyStripping.CollectBlackListTypes(hashSet, types, baseTypes);
            foreach (TypeDefinition current in hashSet)
            {
                w.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", current.FullName);
            }
        }
        private static void GenerateBlackListTypeXML(TextWriter w, IList <TypeDefinition> types, List <string> baseTypes)
        {
            HashSet <TypeDefinition> typesToPreserve = new HashSet <TypeDefinition>();

            MonoAssemblyStripping.CollectBlackListTypes(typesToPreserve, types, baseTypes);
            using (HashSet <TypeDefinition> .Enumerator enumerator = typesToPreserve.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    TypeDefinition current = enumerator.Current;
                    w.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", (object)((TypeReference)current).get_FullName());
                }
            }
        }
        public static string GenerateLinkXmlToPreserveDerivedTypes(string stagingArea, string librariesFolder, RuntimeClassRegistry usedClasses)
        {
            // ISSUE: object of a compiler-generated type is created
            // ISSUE: variable of a compiler-generated type
            MonoAssemblyStripping.\u003CGenerateLinkXmlToPreserveDerivedTypes\u003Ec__AnonStorey6C typesCAnonStorey6C = new MonoAssemblyStripping.\u003CGenerateLinkXmlToPreserveDerivedTypes\u003Ec__AnonStorey6C();
            // ISSUE: reference to a compiler-generated field
            typesCAnonStorey6C.usedClasses = usedClasses;
            string fullPath = Path.GetFullPath(Path.Combine(stagingArea, "preserved_derived_types.xml"));

            // ISSUE: reference to a compiler-generated field
            typesCAnonStorey6C.resolver = new DefaultAssemblyResolver();
            // ISSUE: reference to a compiler-generated field
            ((BaseAssemblyResolver)typesCAnonStorey6C.resolver).AddSearchDirectory(librariesFolder);
            using (TextWriter textWriter = (TextWriter) new StreamWriter(fullPath))
            {
                textWriter.WriteLine("<linker>");
                // ISSUE: reference to a compiler-generated field
                // ISSUE: reference to a compiler-generated method
                // ISSUE: reference to a compiler-generated method
                using (HashSet <AssemblyDefinition> .Enumerator enumerator1 = MonoAssemblyStripping.CollectAssembliesRecursive(((IEnumerable <string>)typesCAnonStorey6C.usedClasses.GetUserAssemblies()).Where <string>(new Func <string, bool>(typesCAnonStorey6C.\u003C\u003Em__EC)).Select <string, AssemblyDefinition>(new Func <string, AssemblyDefinition>(typesCAnonStorey6C.\u003C\u003Em__ED))).GetEnumerator())
                {
                    while (enumerator1.MoveNext())
                    {
                        AssemblyDefinition current1 = enumerator1.Current;
                        if (!(((AssemblyNameReference)current1.get_Name()).get_Name() == "UnityEngine"))
                        {
                            HashSet <TypeDefinition> typesToPreserve = new HashSet <TypeDefinition>();
                            // ISSUE: reference to a compiler-generated field
                            MonoAssemblyStripping.CollectBlackListTypes(typesToPreserve, (IList <TypeDefinition>)current1.get_MainModule().get_Types(), typesCAnonStorey6C.usedClasses.GetAllManagedBaseClassesAsString());
                            if (typesToPreserve.Count != 0)
                            {
                                textWriter.WriteLine("<assembly fullname=\"{0}\">", (object)((AssemblyNameReference)current1.get_Name()).get_Name());
                                using (HashSet <TypeDefinition> .Enumerator enumerator2 = typesToPreserve.GetEnumerator())
                                {
                                    while (enumerator2.MoveNext())
                                    {
                                        TypeDefinition current2 = enumerator2.Current;
                                        textWriter.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", (object)((TypeReference)current2).get_FullName());
                                    }
                                }
                                textWriter.WriteLine("</assembly>");
                            }
                        }
                    }
                }
                textWriter.WriteLine("</linker>");
            }
            return(fullPath);
        }
 private static void CollectBlackListTypes(HashSet <TypeDefinition> typesToPreserve, IList <TypeDefinition> types, List <string> baseTypes)
 {
     if (types != null)
     {
         foreach (TypeDefinition current in types)
         {
             if (current != null)
             {
                 foreach (string current2 in baseTypes)
                 {
                     if (MonoAssemblyStripping.DoesTypeEnheritFrom(current, current2))
                     {
                         typesToPreserve.Add(current);
                         break;
                     }
                 }
                 MonoAssemblyStripping.CollectBlackListTypes(typesToPreserve, current.NestedTypes, baseTypes);
             }
         }
     }
 }
        public static string GenerateLinkXmlToPreserveDerivedTypes(string stagingArea, string librariesFolder, RuntimeClassRegistry usedClasses)
        {
            string fullPath = Path.GetFullPath(Path.Combine(stagingArea, "preserved_derived_types.xml"));
            DefaultAssemblyResolver resolver = new DefaultAssemblyResolver();

            resolver.AddSearchDirectory(librariesFolder);
            using (TextWriter textWriter = new StreamWriter(fullPath))
            {
                textWriter.WriteLine("<linker>");
                foreach (AssemblyDefinition current in MonoAssemblyStripping.CollectAssembliesRecursive((from s in usedClasses.GetUserAssemblies()
                                                                                                         where usedClasses.IsDLLUsed(s)
                                                                                                         select s).Select(delegate(string file)
                {
                    BaseAssemblyResolver arg_1F_0 = resolver;
                    string arg_1F_1 = Path.GetFileNameWithoutExtension(file);
                    ReaderParameters readerParameters = new ReaderParameters();
                    readerParameters.set_AssemblyResolver(resolver);
                    return(arg_1F_0.Resolve(arg_1F_1, readerParameters));
                })))
                {
                    if (!(current.get_Name().get_Name() == "UnityEngine"))
                    {
                        HashSet <TypeDefinition> hashSet = new HashSet <TypeDefinition>();
                        MonoAssemblyStripping.CollectBlackListTypes(hashSet, current.get_MainModule().get_Types(), usedClasses.GetAllManagedBaseClassesAsString());
                        if (hashSet.Count != 0)
                        {
                            textWriter.WriteLine("<assembly fullname=\"{0}\">", current.get_Name().get_Name());
                            foreach (TypeDefinition current2 in hashSet)
                            {
                                textWriter.WriteLine("<type fullname=\"{0}\" preserve=\"all\"/>", current2.get_FullName());
                            }
                            textWriter.WriteLine("</assembly>");
                        }
                    }
                }
                textWriter.WriteLine("</linker>");
            }
            return(fullPath);
        }