Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/linker
diff options
context:
space:
mode:
authorMike Voorhees <michaelv@unity3d.com>2017-05-16 17:20:52 +0300
committerMarek Safar <marek.safar@gmail.com>2017-05-16 20:01:55 +0300
commit81c6635355c40f4c66772bd200918204b62c5234 (patch)
tree85764c9dcdf1b75af599ea178de57fe29d111bc5 /linker
parent6f93b07e7b8a8d24a09464e377a12065572237ad (diff)
Add ability to preserve an entire assembly
Diffstat (limited to 'linker')
-rw-r--r--linker/Mono.Linker.Steps/ResolveFromXmlStep.cs9
-rw-r--r--linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs20
-rw-r--r--linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml3
-rw-r--r--linker/Tests/Mono.Linker.Tests.Cases/Mono.Linker.Tests.Cases.csproj2
4 files changed, 32 insertions, 2 deletions
diff --git a/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs b/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
index 582069911..bcf300a57 100644
--- a/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
+++ b/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs
@@ -83,8 +83,13 @@ namespace Mono.Linker.Steps {
{
while (iterator.MoveNext ()) {
AssemblyDefinition assembly = GetAssembly (context, GetFullName (iterator.Current));
- ProcessTypes (assembly, iterator.Current.SelectChildren ("type", _ns));
- ProcessNamespaces (assembly, iterator.Current.SelectChildren ("namespace", _ns));
+ if (GetTypePreserve (iterator.Current) == TypePreserve.All) {
+ foreach (var type in assembly.MainModule.Types)
+ MarkAndPreserveAll (type);
+ } else {
+ ProcessTypes (assembly, iterator.Current.SelectChildren ("type", _ns));
+ ProcessNamespaces (assembly, iterator.Current.SelectChildren ("namespace", _ns));
+ }
}
}
diff --git a/linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs b/linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs
new file mode 100644
index 000000000..246c80af6
--- /dev/null
+++ b/linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs
@@ -0,0 +1,20 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+
+ [KeptMember(".ctor()")]
+ class UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused {
+ [Kept]
+ void Foo ()
+ {
+ }
+ }
+ }
+}
diff --git a/linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml b/linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml
new file mode 100644
index 000000000..7ecdb6c22
--- /dev/null
+++ b/linker/Tests/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml
@@ -0,0 +1,3 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all" />
+</linker> \ No newline at end of file
diff --git a/linker/Tests/Mono.Linker.Tests.Cases/Mono.Linker.Tests.Cases.csproj b/linker/Tests/Mono.Linker.Tests.Cases/Mono.Linker.Tests.Cases.csproj
index a9cba0fda..1ebc87aa6 100644
--- a/linker/Tests/Mono.Linker.Tests.Cases/Mono.Linker.Tests.Cases.csproj
+++ b/linker/Tests/Mono.Linker.Tests.Cases/Mono.Linker.Tests.Cases.csproj
@@ -96,6 +96,7 @@
<Compile Include="LinkXml\UnusedMethodPreservedByLinkXmlIsKept.cs" />
<Compile Include="LinkXml\UnusedNestedTypePreservedByLinkXmlIsKept.cs" />
<Compile Include="LinkXml\UnusedPropertyPreservedByLinkXmlIsKept.cs" />
+ <Compile Include="LinkXml\UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs" />
<Compile Include="LinkXml\UnusedTypePreservedByLinkXmlIsKept.cs" />
<Compile Include="LinkXml\UnusedTypeWithPreserveAllHasAllMembersPreserved.cs" />
<Compile Include="LinkXml\UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs" />
@@ -128,6 +129,7 @@
<Content Include="LinkXml\UnusedMethodPreservedByLinkXmlIsKept.xml" />
<Content Include="LinkXml\UnusedNestedTypePreservedByLinkXmlIsKept.xml" />
<Content Include="LinkXml\UnusedPropertyPreservedByLinkXmlIsKept.xml" />
+ <Content Include="LinkXml\UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml" />
<Content Include="LinkXml\UnusedTypePreservedByLinkXmlIsKept.xml" />
<Content Include="LinkXml\UnusedTypeWithPreserveAllHasAllMembersPreserved.xml" />
<Content Include="LinkXml\UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml" />