Пример #1
0
        protected override void ProcessAssembly(AssemblyDefinition assembly)
        {
            if (!Annotations.HasAction(assembly))
            {
                Annotations.SetAction(assembly, AssemblyAction.Skip);
            }

            if (Profile.IsSdkAssembly(assembly) || Profile.IsProductAssembly(assembly))
            {
                return;
            }

            bool changed = false;

            foreach (var type in assembly.MainModule.Types)
            {
                if (MightNeedFix(type))
                {
                    changed |= FixAbstractMethods(type);
                }
            }

            if (changed)
            {
                AssemblyAction action = Annotations.HasAction(assembly) ? Annotations.GetAction(assembly) : AssemblyAction.Skip;
                if (action == AssemblyAction.Skip || action == AssemblyAction.Copy || action == AssemblyAction.Delete)
                {
                    Annotations.SetAction(assembly, AssemblyAction.Save);
                }
                var td = AbstractMethodErrorConstructor.DeclaringType.Resolve();
                Annotations.Mark(td);
                Annotations.SetPreserve(td, TypePreserve.Nothing);
                Annotations.AddPreservedMethod(td, AbstractMethodErrorConstructor.Resolve());
            }
        }
        protected override void ProcessAssembly(AssemblyDefinition assembly)
        {
            if (!Annotations.HasAction(assembly))
            {
                Annotations.SetAction(assembly, AssemblyAction.Skip);
            }


            if (IsProductOrSdkAssembly(assembly))
            {
                return;
            }

            CheckAppDomainUsageUnconditional(assembly, (string msg) => Context.Logger.LogMessage(MessageImportance.High, msg));

            if (FixAbstractMethodsUnconditional(assembly))
            {
                Context.SafeReadSymbols(assembly);
                AssemblyAction action = Annotations.HasAction(assembly) ? Annotations.GetAction(assembly) : AssemblyAction.Skip;
                if (action == AssemblyAction.Skip || action == AssemblyAction.Copy || action == AssemblyAction.Delete)
                {
                    Annotations.SetAction(assembly, AssemblyAction.Save);
                }
                var td = AbstractMethodErrorConstructor.DeclaringType.Resolve();
                Annotations.Mark(td);
                Annotations.SetPreserve(td, TypePreserve.Nothing);
                Annotations.AddPreservedMethod(td, AbstractMethodErrorConstructor.Resolve());
            }
        }
Пример #3
0
        protected override void ProcessAssembly(AssemblyDefinition assembly)
        {
            if (IsSkipped(assembly))
            {
                ProcessUserAssembly(assembly);
                return;
            }

            if (!link_sdk_only)
            {
                if (!Annotations.HasAction(assembly))                  // stray assembly not picked up when resolving references
                {
                    Annotations.SetAction(assembly, AssemblyAction.Link);
                }

                return;
            }

            if (Profile.IsSdkAssembly(assembly) || Profile.IsProductAssembly(assembly))
            {
                Annotations.SetAction(assembly, AssemblyAction.Link);
                return;
            }

            ProcessUserAssembly(assembly);
        }
Пример #4
0
 protected override void ProcessAssembly(AssemblyDefinition assembly)
 {
     if (!IsSkipped(assembly) && IsLinked(assembly))
     {
         if (!Annotations.HasAction(assembly))                  // stray assembly not picked up when resolving references
         {
             Annotations.SetAction(assembly, AssemblyAction.Link);
         }
         return;
     }
     ProcessUserAssembly(assembly);
 }
Пример #5
0
        protected override void ProcessAssembly(AssemblyDefinition assembly)
        {
            var action = Annotations.HasAction(assembly) ? Annotations.GetAction(assembly) : AssemblyAction.Skip;

            if (action == AssemblyAction.Delete)
            {
                return;
            }

            if (AddKeepAlives(assembly))
            {
                if (action == AssemblyAction.Skip || action == AssemblyAction.Copy)
                {
                    Annotations.SetAction(assembly, AssemblyAction.Save);
                }
            }
        }
        bool CheckShouldProcessAssembly(AssemblyDefinition assembly)
        {
            if (!Annotations.HasAction(assembly))
            {
                Annotations.SetAction(assembly, AssemblyAction.Skip);
            }

            if (IsProductOrSdkAssembly(assembly))
            {
                return(false);
            }

#if !NET5_LINKER
            CheckAppDomainUsageUnconditional(assembly, (string msg) => Context.LogMessage(MessageImportance.High, msg));
#endif  // !NET5_LINKER

            return(assembly.MainModule.HasTypeReference("Java.Lang.Object"));
        }
        protected override void ProcessAssembly(AssemblyDefinition assembly)
        {
            if (!Annotations.HasAction(assembly))
            {
                return;
            }
            var action = Annotations.GetAction(assembly);

            if (action == AssemblyAction.Skip || action == AssemblyAction.Delete)
            {
                return;
            }

            var fileName = assembly.Name.Name + ".dll";

            if (MonoAndroidHelper.IsFrameworkAssembly(fileName) &&
                !MonoAndroidHelper.FrameworkEmbeddedJarLookupTargets.Contains(fileName) &&
                !MonoAndroidHelper.FrameworkEmbeddedNativeLibraryAssemblies.Contains(fileName))
            {
                return;
            }

            bool assembly_modified = false;

            foreach (var mod in assembly.Modules)
            {
                foreach (var r in mod.Resources.ToArray())
                {
                    if (ShouldStripResource(r))
                    {
                        Context.LogMessage("    Stripped {0} from {1}", r.Name, fileName);
                        mod.Resources.Remove(r);
                        assembly_modified = true;
                    }
                }
            }
            if (assembly_modified && action == AssemblyAction.Copy)
            {
                Annotations.SetAction(assembly, AssemblyAction.Save);
            }
        }
Пример #8
0
        protected override void ProcessAssembly(AssemblyDefinition assembly)
        {
            if (!Annotations.HasAction(assembly))
            {
                Annotations.SetAction(assembly, AssemblyAction.Skip);
            }

            bool changed = FixAbstractMethods(assembly);

            if (changed)
            {
                Context.SafeReadSymbols(assembly);
                AssemblyAction action = Annotations.HasAction(assembly) ? Annotations.GetAction(assembly) : AssemblyAction.Skip;
                if (action == AssemblyAction.Skip || action == AssemblyAction.Copy || action == AssemblyAction.Delete)
                {
                    Annotations.SetAction(assembly, AssemblyAction.Save);
                }
                var td = AbstractMethodErrorConstructor.DeclaringType.Resolve();
                Annotations.Mark(td);
                Annotations.SetPreserve(td, TypePreserve.Nothing);
                Annotations.AddPreservedMethod(td, AbstractMethodErrorConstructor.Resolve());
            }
        }