Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 0 additions & 28 deletions src/Microsoft.Android.Sdk.ILLink/GetAssembliesStep.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\FixAbstractMethodsStep.cs" Link="MonoDroid.Tuner\FixAbstractMethodsStep.cs" />
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\FixLegacyResourceDesignerStep.cs" Link="MonoDroid.Tuner\FixLegacyResourceDesignerStep.cs" />
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\LinkDesignerBase.cs" Link="MonoDroid.Tuner\LinkDesignerBase.cs" />
<Compile Include="..\Xamarin.Android.Build.Tasks\Linker\MonoDroid.Tuner\RemoveResourceDesignerStep.cs" Link="MonoDroid.Tuner\RemoveResourceDesignerStep.cs" />

<!--Other .NET for Android / Java.Interop files-->
<Compile Include="..\..\external\Java.Interop\src\Java.Interop.Tools.Cecil\Java.Interop.Tools.Cecil\CustomAttributeProviderRocks.cs" Link="Java.Interop\CustomAttributeProviderRocks.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,43 @@
using System.Collections.Generic;
using Mono.Cecil.Cil;
using System.Text.RegularExpressions;
#if ILLINK
using Microsoft.Android.Sdk.ILLink;
#endif

namespace MonoDroid.Tuner
{
public class RemoveResourceDesignerStep : LinkDesignerBase
public class RemoveResourceDesignerStep : LinkDesignerBase, IAssemblyModifierPipelineStep
{
TypeDefinition mainDesigner = null;
AssemblyDefinition mainAssembly = null;
CustomAttribute mainDesignerAttribute;
Dictionary<string, int> designerConstants;
Regex opCodeRegex = new Regex (@"([\w]+): ([\w]+) ([\w.]+) ([\w:./]+)");

IList<AssemblyDefinition> allAssemblies;
Action<string> log;

public RemoveResourceDesignerStep (IList<AssemblyDefinition> allAssemblies, Action<string> logger)
{
this.allAssemblies = allAssemblies;
this.log = logger;
}

public override void LogMessage (string message)
{
log (message);
}

public void ProcessAssembly (AssemblyDefinition assembly, StepContext context)
{
LoadDesigner ();
context.IsAssemblyModified |= ProcessAssemblyDesigner (assembly);
}

protected override void LoadDesigner ()
{
if (mainAssembly != null)
return;
// resolve the MainAssembly Resource designer TypeDefinition
AndroidLinkConfiguration config = AndroidLinkConfiguration.GetInstance (Context);
if (config == null)
return;
foreach(var asm in config.Assemblies) {
foreach(var asm in allAssemblies) {
if (FindResourceDesigner (asm, mainApplication: true, designer: out mainDesigner, designerAttribute: out mainDesignerAttribute)) {
mainAssembly = asm;
break;
Expand All @@ -45,14 +59,6 @@ protected override void LoadDesigner ()
designerConstants = BuildResourceDesignerFieldLookup (mainDesigner);
}

protected override void EndProcess ()
{
if (mainDesigner != null) {
LogMessage ($" Setting Action on {mainAssembly.Name} to Save.");
Annotations.SetAction (mainAssembly, AssemblyAction.Save);
}
}

protected override void FixBody (MethodBody body, TypeDefinition designer)
{
Dictionary<Instruction, int> instructions = new Dictionary<Instruction, int>();
Expand Down Expand Up @@ -100,7 +106,7 @@ internal override bool ProcessAssemblyDesigner (AssemblyDefinition assembly)
if (assembly != mainAssembly) {
LogMessage ($" {assembly.Name.Name} is not the main assembly. ");
if (!FindResourceDesigner (assembly, mainApplication: false, designer: out localDesigner, designerAttribute: out designerAttribute)) {
Context.LogMessage ($" {assembly.Name.Name} does not have a designer file.");
LogMessage ($" {assembly.Name.Name} does not have a designer file.");
return false;
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,18 +198,6 @@
<_TrimmerCustomSteps Include="$(_AndroidLinkerCustomStepAssembly)" Type="MonoDroid.Tuner.FixAbstractMethodsStep" />
<!-- Custom steps that run after MarkStep -->
<!-- Custom steps that run after CleanStep -->
<_TrimmerCustomSteps
Condition=" '$(AndroidLinkResources)' == 'true' "
Include="$(_AndroidLinkerCustomStepAssembly)"
AfterStep="CleanStep"
Type="MonoDroid.Tuner.RemoveResourceDesignerStep"
/>
<_TrimmerCustomSteps
Condition=" '$(AndroidLinkResources)' == 'true' "
Include="$(_AndroidLinkerCustomStepAssembly)"
AfterStep="CleanStep"
Type="MonoDroid.Tuner.GetAssembliesStep"
/>
<_TrimmerCustomSteps
Condition=" '$(AndroidUseDesignerAssembly)' == 'true' "
Include="$(_AndroidLinkerCustomStepAssembly)"
Expand Down Expand Up @@ -259,6 +247,7 @@
<PostTrimmingPipeline
Assemblies="@(_PostTrimmingAssembly)"
AddKeepAlives="$(AndroidAddKeepAlives)"
AndroidLinkResources="$(AndroidLinkResources)"
Deterministic="$(Deterministic)" />
</Target>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public class PostTrimmingPipeline : AndroidTask

public bool AddKeepAlives { get; set; }

public bool AndroidLinkResources { get; set; }

public bool Deterministic { get; set; }

public override bool RunTask ()
Expand All @@ -47,6 +49,13 @@ public override bool RunTask ()

var steps = new List<IAssemblyModifierPipelineStep> ();
steps.Add (new StripEmbeddedLibrariesStep (Log));
if (AndroidLinkResources) {
var allAssemblies = new List<AssemblyDefinition> (Assemblies.Length);
foreach (var item in Assemblies) {
allAssemblies.Add (resolver.GetAssembly (item.ItemSpec));
}
steps.Add (new RemoveResourceDesignerStep (allAssemblies, (msg) => Log.LogDebugMessage (msg)));
Comment thread
sbomer marked this conversation as resolved.
}
if (AddKeepAlives) {
// Memoize the corlib resolution so the attempt (and any error logging) happens at most once,
// regardless of how many assemblies/methods need KeepAlive injection.
Expand Down
Loading