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
diff options
context:
space:
mode:
authorSven Boemer <sbomer@gmail.com>2019-02-20 01:16:58 +0300
committerMarek Safar <marek.safar@gmail.com>2019-02-20 01:16:58 +0300
commitfa9ccbdaf6907c69ef1bb117906f8f012218d57f (patch)
tree4d4cbe2d4079a35edca350a4e444831c2f9dd19a /test/Mono.Linker.Tests.Cases/LinkXml
parente64148792193bf7d706428a64632ebf7f8023d3b (diff)
Adopt new directory layout (#466)
This organizes the source and test projects as follows: - source projects go in `src/project/projectfile.csproj` - test projects go in `test/project/projectfile.csproj` The uniform layout of projects is part of the arcade onboarding (see https://github.com/mono/linker/issues/452).
Diffstat (limited to 'test/Mono.Linker.Tests.Cases/LinkXml')
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs31
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml4
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs19
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs24
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs19
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs32
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs3
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs11
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs7
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs17
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml14
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs7
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs31
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs18
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml8
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs17
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs16
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs20
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs17
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs20
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs18
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs61
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs15
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml4
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs37
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs30
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml12
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs85
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs19
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs16
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs37
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs14
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs10
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs46
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml17
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs27
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs20
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml3
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs14
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs15
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml6
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs86
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs85
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs66
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml7
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs74
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs26
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml8
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs50
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml5
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs52
-rw-r--r--test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml7
77 files changed, 1479 insertions, 0 deletions
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs
new file mode 100644
index 000000000..f02913bc5
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.cs
@@ -0,0 +1,31 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ [KeptMember (".ctor()")]
+ public class AssemblyWithPreserveAll {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class UnusedType {
+ [Kept]
+ public int UnusedField;
+
+ [Kept]
+ [KeptBackingField]
+ public int UnusedProperty { [Kept] get; [Kept] set; }
+
+ [Kept]
+ public void UnusedMethod ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class UnusedNestedType {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml
new file mode 100644
index 000000000..a1a96721e
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/AssemblyWithPreserveAll.xml
@@ -0,0 +1,4 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs
new file mode 100644
index 000000000..bbf26c1d4
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.cs
@@ -0,0 +1,19 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+using Mono.Linker.Tests.Cases.LinkXml.Dependencies;
+
+namespace Mono.Linker.Tests.Cases.LinkXml
+{
+ [KeepTypeForwarderOnlyAssemblies ("false")]
+ [SetupCompileBefore ("Library.dll", new[] { "Dependencies/CanPreserveAnExportedType_Library.cs" })]
+ // Add another assembly in that uses the forwarder just to make things a little more complex
+ [SetupCompileBefore ("Forwarder.dll", new[] { "Dependencies/CanPreserveAnExportedType_Forwarder.cs" }, references: new[] { "Library.dll" })]
+
+ [RemovedAssembly ("Forwarder.dll")]
+ [KeptMemberInAssembly ("Library.dll", typeof (CanPreserveAnExportedType_Library), "Field1", "Method()", ".ctor()")]
+ class CanPreserveAnExportedType {
+ public static void Main () {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml
new file mode 100644
index 000000000..f469bb982
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveAnExportedType.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.Dependencies.CanPreserveAnExportedType_Library" preserve="all">
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs
new file mode 100644
index 000000000..0016d7272
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Runtime.InteropServices;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ [SetupLinkerArgument ("--exclude-feature", "com")]
+ public class CanPreserveExcludedFeatureCom {
+ public static void Main()
+ {
+ var a = new A ();
+ }
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ [KeptAttributeAttribute (typeof(GuidAttribute))]
+ [ComImport]
+ [Guid ("D7BB1889-3AB7-4681-A115-60CA9158FECA")]
+ class A
+ {
+ private int field;
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml
new file mode 100644
index 000000000..bcd942aaf
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExcludedFeatureCom.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="mscorlib">
+ <type fullname="System.Runtime.InteropServices.GuidAttribute" preserve="all">
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs
new file mode 100644
index 000000000..d122d98f3
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.cs
@@ -0,0 +1,19 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+using Mono.Linker.Tests.Cases.LinkXml.Dependencies;
+
+namespace Mono.Linker.Tests.Cases.LinkXml
+{
+ [KeepTypeForwarderOnlyAssemblies ("false")]
+ [SetupCompileBefore ("Library.dll", new [] { "Dependencies/CanPreserveAnExportedType_Library.cs" })]
+ // Add another assembly in that uses the forwarder just to make things a little more complex
+ [SetupCompileBefore ("Forwarder.dll", new [] { "Dependencies/CanPreserveAnExportedType_Forwarder.cs" }, references: new [] { "Library.dll" })]
+
+ [RemovedAssembly ("Forwarder.dll")]
+ [KeptMemberInAssembly ("Library.dll", typeof (CanPreserveAnExportedType_Library), "Field1", "Method()", ".ctor()")]
+ class CanPreserveExportedTypesUsingRegex {
+ public static void Main () {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml
new file mode 100644
index 000000000..b5827e265
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveExportedTypesUsingRegex.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Can*" preserve="all">
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs
new file mode 100644
index 000000000..0eb9542d2
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.cs
@@ -0,0 +1,32 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml
+{
+ [KeptMember (".ctor()")]
+ class CanPreserveTypesUsingRegex {
+ public static void Main () {
+ }
+
+ [Kept]
+ void UnusedHelper () {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Bar {
+ }
+ }
+}
+
+namespace Mono.Linker.Tests.Cases.LinkXml.PreserveNamespace {
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Type1 {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Type2 {
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml
new file mode 100644
index 000000000..12f870c04
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/CanPreserveTypesUsingRegex.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Can*" />
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.PreserveNamespace*" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs
new file mode 100644
index 000000000..cb6f81e48
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Forwarder.cs
@@ -0,0 +1,3 @@
+using System;
+
+[assembly: System.Runtime.CompilerServices.TypeForwardedTo (typeof (Mono.Linker.Tests.Cases.LinkXml.Dependencies.CanPreserveAnExportedType_Library))]
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs
new file mode 100644
index 000000000..38814d986
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/CanPreserveAnExportedType_Library.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies
+{
+ public class CanPreserveAnExportedType_Library {
+ public int Field1;
+
+ public void Method () {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs
new file mode 100644
index 000000000..d9803fada
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs
@@ -0,0 +1,7 @@
+namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod {
+ public class Base {
+ public virtual void VirtualMethodFromBase ()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs
new file mode 100644
index 000000000..3c1158922
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs
@@ -0,0 +1,17 @@
+namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod {
+ public class Library1 : Base {
+ public override void VirtualMethodFromBase ()
+ {
+ }
+ }
+
+ /// <summary>
+ /// This is here to confirm that derived types in the same assembly as the embedded resource are correctly taken into
+ /// consideration
+ /// </summary>
+ public class Library1Secondary : Base {
+ public override void VirtualMethodFromBase ()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml
new file mode 100644
index 000000000..58f90df91
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml
@@ -0,0 +1,14 @@
+<linker>
+ <assembly fullname="Library1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.Library1Secondary" preserve="nothing">
+ <!-- Need to preserve a ctor so that an instance of the type is possible-->
+ <method name=".ctor"/>
+ </type>
+ </assembly>
+ <assembly fullname="Library2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.Library2" preserve="nothing">
+ <!-- Need to preserve a ctor so that an instance of the type is possible-->
+ <method name=".ctor"/>
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs
new file mode 100644
index 000000000..b977a5834
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs
@@ -0,0 +1,7 @@
+namespace Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod {
+ public class Library2 : Base {
+ public override void VirtualMethodFromBase ()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs b/test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs
new file mode 100644
index 000000000..6111bc713
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.cs
@@ -0,0 +1,31 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+using Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ [SetupCompileBefore ("Base.dll",
+ new []{"Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Base.cs"})]
+ [SetupCompileBefore ("Library1.dll",
+ new [] { "Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.cs"},
+ new [] { "Base.dll"},
+ resources: new [] { "Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library1.xml"})]
+ [SetupCompileBefore("Library2.dll",
+ new [] {"Dependencies/EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod/Library2.cs"},
+ new [] {"Base.dll"},
+ addAsReference: false)]
+ [IncludeBlacklistStep (true)]
+
+ [KeptMemberInAssembly ("Library1.dll", typeof (Library1), "VirtualMethodFromBase()")]
+ [KeptMemberInAssembly ("Library1.dll", typeof (Library1Secondary), "VirtualMethodFromBase()")]
+
+ // Library1's embedded link xml will preserve the Library2 type. Because Library2 shares a base class with Library1
+ // Library2's override should be kept as well
+ [KeptMemberInAssembly ("Library2.dll", "Mono.Linker.Tests.Cases.LinkXml.Dependencies.EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod.Library2", "VirtualMethodFromBase()")]
+ public class EmbeddedLinkXmlPreservesAdditionalAssemblyWithOverriddenMethod {
+ public static void Main ()
+ {
+ var tmp = new Library1 ();
+ tmp.VirtualMethodFromBase ();
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs
new file mode 100644
index 000000000..1e0c0a738
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib1.cs
@@ -0,0 +1,10 @@
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies {
+ public class OnAssembly_Lib1 {
+ public static void UsedSoCompilerDoesntRemoveReference ()
+ {
+ }
+
+ public class FeatureOneClass {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs
new file mode 100644
index 000000000..0a7731e79
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/Dependencies/OnAssembly_Lib2.cs
@@ -0,0 +1,10 @@
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies {
+ public class OnAssembly_Lib2 {
+ public static void UsedSoCompilerDoesntRemoveReference ()
+ {
+ }
+
+ public class FeatureTwoClass {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs
new file mode 100644
index 000000000..cbdfb5509
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.cs
@@ -0,0 +1,18 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+using Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude {
+ [SetupLinkerArgument ("--exclude-feature", "one")]
+ [SetupCompileBefore ("library1.dll", new[] {typeof (OnAssembly_Lib1)})]
+ [SetupCompileBefore ("library2.dll", new[] {typeof (OnAssembly_Lib2)})]
+ [RemovedTypeInAssembly ("library1.dll", typeof (OnAssembly_Lib1.FeatureOneClass))]
+ [KeptTypeInAssembly ("library2.dll", typeof (OnAssembly_Lib2.FeatureTwoClass))]
+ public class OnAssembly {
+ public static void Main ()
+ {
+ OnAssembly_Lib1.UsedSoCompilerDoesntRemoveReference ();
+ OnAssembly_Lib2.UsedSoCompilerDoesntRemoveReference ();
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml
new file mode 100644
index 000000000..9583b20ee
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnAssembly.xml
@@ -0,0 +1,8 @@
+<linker>
+ <assembly fullname="library1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" feature="one">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies.OnAssembly_Lib1/FeatureOneClass"/>
+ </assembly>
+ <assembly fullname="library2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" feature="two">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.Dependencies.OnAssembly_Lib2/FeatureTwoClass"/>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs
new file mode 100644
index 000000000..e733ab2d1
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.cs
@@ -0,0 +1,17 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude {
+ [SetupLinkerArgument ("--exclude-feature", "one")]
+ public class OnEvent {
+ public static void Main ()
+ {
+ }
+
+ public event EventHandler<EventArgs> FeatureOne;
+
+ [Kept]
+ public event EventHandler<EventArgs> FeatureTwo {[Kept] add {}[Kept] remove {} }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml
new file mode 100644
index 000000000..d0fdc860d
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnEvent.xml
@@ -0,0 +1,10 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnEvent">
+ <event signature="System.EventHandler`1&lt;System.EventArgs&gt; FeatureOne" feature="one"/>
+ </type>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnEvent">
+ <event signature="System.EventHandler`1&lt;System.EventArgs&gt; FeatureTwo" feature="two"/>
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs
new file mode 100644
index 000000000..93a61f0ab
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.cs
@@ -0,0 +1,16 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude {
+ [SetupLinkerArgument ("--exclude-feature", "one")]
+ public class OnField {
+ public static void Main ()
+ {
+ }
+
+ private int _featureOne;
+
+ [Kept]
+ private int _featureTwo;
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml
new file mode 100644
index 000000000..b7a251bf8
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnField.xml
@@ -0,0 +1,10 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnField">
+ <field signature="System.Int32 _featureOne" feature="one"/>
+ </type>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnField">
+ <field signature="System.Int32 _featureTwo" feature="two"/>
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs
new file mode 100644
index 000000000..11feb7a6a
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.cs
@@ -0,0 +1,20 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude {
+ [SetupLinkerArgument ("--exclude-feature", "one")]
+ public class OnMethod {
+ public static void Main ()
+ {
+ }
+
+ public void FeatureOne ()
+ {
+ }
+
+ [Kept]
+ public void FeatureTwo ()
+ {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml
new file mode 100644
index 000000000..5aaf4c06f
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnMethod.xml
@@ -0,0 +1,10 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnMethod">
+ <method signature="System.Void FeatureOne()" feature="one"/>
+ </type>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnMethod">
+ <method signature="System.Void FeatureTwo()" feature="two"/>
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs
new file mode 100644
index 000000000..b6e78b255
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.cs
@@ -0,0 +1,17 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude {
+ [SetupLinkerArgument ("--exclude-feature", "one")]
+ public class OnProperty {
+ public static void Main ()
+ {
+ }
+
+ public int FeatureOne { get; set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int FeatureTwo {[Kept] get; [Kept] set; }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml
new file mode 100644
index 000000000..3b2ee6fcb
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnProperty.xml
@@ -0,0 +1,10 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnProperty">
+ <property signature="System.Int32 FeatureOne" accessors="all" feature="one"/>
+ </type>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnProperty">
+ <property signature="System.Int32 FeatureTwo" accessors="all" feature="two"/>
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs
new file mode 100644
index 000000000..368812fcc
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.cs
@@ -0,0 +1,20 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+using Mono.Linker.Tests.Cases.Expectations.Metadata;
+
+namespace Mono.Linker.Tests.Cases.LinkXml.FeatureExclude {
+ [SetupLinkerArgument ("--exclude-feature", "one")]
+ public class OnType {
+ public static void Main ()
+ {
+ }
+
+ class FeatureOneClass
+ {
+ }
+
+ [Kept]
+ [KeptMember(".ctor()")]
+ class FeatureTwoClass {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml
new file mode 100644
index 000000000..a2e91e062
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/FeatureExclude/OnType.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnType/FeatureOneClass" feature="one"/>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.FeatureExclude.OnType/FeatureTwoClass" feature="two"/>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs
new file mode 100644
index 000000000..c319c1442
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.cs
@@ -0,0 +1,18 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml
+{
+ abstract class PreserveBackingFieldWhenPropertyIsKept
+ {
+ public static void Main ()
+ {
+ Prop = 1;
+ }
+
+ public abstract int Base { set; }
+
+ [Kept]
+ [KeptBackingField]
+ public static int Prop { get; [Kept] set; }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml
new file mode 100644
index 000000000..256f50a84
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/PreserveBackingFieldWhenPropertyIsKept.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.PreserveBackingFieldWhenPropertyIsKept" preserve="fields">
+ </type>
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs
new file mode 100644
index 000000000..623ee17ca
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.cs
@@ -0,0 +1,61 @@
+
+
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml
+{
+ class TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved {
+ public static void Main () {
+ }
+
+ [Kept]
+ class Unused : IFoo<int>, IFoo<string>, IFoo<Cat>, IFoo2<int>, IFoo3<int, string, char>, IDog, IFoo<IFoo<int>> {
+ [Kept]
+ public int Field1;
+
+ [Kept]
+ public IFoo<int> Field2;
+
+ public IFoo<int> Property1 { get; set; }
+
+ string IDog.Name { get; set; }
+
+ int IFoo<int>.Bar { get; set; }
+
+ int IFoo<string>.Bar { get; set; }
+
+ int IFoo<Cat>.Bar { get; set; }
+
+ int Bar2 { get; set; }
+
+ int IFoo2<int>.Bar2 { get; set; }
+
+ int Bar3 { get; set; }
+
+ int IFoo3<int, string, char>.Bar3 { get; set; }
+
+ int IFoo<IFoo<int>>.Bar { get; set; }
+ }
+
+ interface IDog {
+ string Name { get; set; }
+ }
+
+ [Kept]
+ interface IFoo<T> {
+
+ int Bar { get; set; }
+ }
+
+ interface IFoo2<T> {
+ int Bar2 { get; set; }
+ }
+
+ interface IFoo3<T, K, J> {
+ int Bar3 { get; set; }
+ }
+
+ class Cat {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml
new file mode 100644
index 000000000..338ee7f76
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved.xml
@@ -0,0 +1,6 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.TypeWithPreserveFieldsHasBackingFieldsOfPropertiesRemoved/Unused" preserve="fields">
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs
new file mode 100644
index 000000000..fb8536a2f
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.cs
@@ -0,0 +1,15 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ [KeptMember (".ctor()")]
+ public class UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused {
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml
new file mode 100644
index 000000000..ca7da2c44
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedAssemblyWithNoDefinedPreserveHasAllTypesPreserved.xml
@@ -0,0 +1,4 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..594b5bd87
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.cs
@@ -0,0 +1,37 @@
+using System;
+
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedEventPreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ [Kept]
+ [KeptBackingField]
+ [KeptEventAddMethod]
+ [KeptEventRemoveMethod]
+ public event EventHandler<EventArgs> Preserved;
+
+ [Kept]
+ public event EventHandler<EventArgs> Preserved1 { [Kept] add { } [Kept] remove { } }
+
+ [Kept]
+ [KeptBackingField]
+ [KeptEventAddMethod]
+ [KeptEventRemoveMethod]
+ public event EventHandler Preserved2;
+
+ [Kept]
+ [KeptBackingField]
+ [KeptEventAddMethod]
+ [KeptEventRemoveMethod]
+ public event EventHandler Preserved3;
+
+ public event EventHandler<EventArgs> NotPreserved;
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..027cc59d1
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedEventPreservedByLinkXmlIsKept.xml
@@ -0,0 +1,10 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedEventPreservedByLinkXmlIsKept/Unused">
+ <event signature="System.EventHandler`1&lt;System.EventArgs&gt; Preserved" />
+ <event signature="System.EventHandler`1&lt;System.EventArgs&gt; Preserved1" />
+ <event signature="System.EventHandler Preserved2" />
+ <event name="Preserved3" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..d41e23716
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.cs
@@ -0,0 +1,30 @@
+using System.Collections.Generic;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedFieldPreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ [Kept]
+ private int _preserved;
+
+ [Kept]
+ private int _preserved2;
+
+ [Kept]
+ private List<int> _preserved3;
+
+ private int _notPreserved;
+ }
+
+ [Kept]
+ class UnusedWithGenerics<T> {
+ [Kept]
+ private List<T> _preserved1;
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..82daa710c
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedFieldPreservedByLinkXmlIsKept.xml
@@ -0,0 +1,12 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedFieldPreservedByLinkXmlIsKept/Unused">
+ <field signature="System.Int32 _preserved" />
+ <field name="_preserved2" />
+ <field signature="System.Collections.Generic.List`1&lt;System.Int32&gt; _preserved3" />
+ </type>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedFieldPreservedByLinkXmlIsKept/UnusedWithGenerics`1">
+ <field signature="System.Collections.Generic.List`1&lt;T&gt; _preserved1" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs
new file mode 100644
index 000000000..659d4c5d1
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.cs
@@ -0,0 +1,85 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ public class UnusedGenericTypeWithPreserveAllHasAllMembersPreserved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused<T1, T2, T3> {
+ [Kept]
+ public int Field1;
+
+ [Kept]
+ private int Field2;
+
+ [Kept]
+ internal int Field3;
+
+ [Kept]
+ public static int Field4;
+
+ [Kept]
+ private static int Field5;
+
+ [Kept]
+ internal static int Field6;
+
+ [Kept]
+ [KeptBackingField]
+ public string Property1 { [Kept] get; [Kept] set;}
+
+ [Kept]
+ [KeptBackingField]
+ private string Property2 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal string Property3 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public static string Property4 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ private static string Property5 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal static string Property6 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ public void Method1 ()
+ {
+ }
+
+ [Kept]
+ private void Method2 ()
+ {
+ }
+
+ [Kept]
+ internal void Method3 ()
+ {
+ }
+
+ [Kept]
+ public static void Method4 ()
+ {
+ }
+
+ [Kept]
+ private static void Method5 ()
+ {
+ }
+
+ [Kept]
+ internal static void Method6 ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml
new file mode 100644
index 000000000..b2da72420
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedGenericTypeWithPreserveAllHasAllMembersPreserved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedGenericTypeWithPreserveAllHasAllMembersPreserved/Unused`3" preserve="all" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs
new file mode 100644
index 000000000..8e362a4d8
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.cs
@@ -0,0 +1,19 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ public class UnusedInterfaceTypeOnTypeWithPreserveAllIsKept {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ interface IFoo {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ [KeptInterface (typeof (IFoo))]
+ class Bar : IFoo {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml
new file mode 100644
index 000000000..48d80c17d
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveAllIsKept.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedInterfaceTypeOnTypeWithPreserveAllIsKept/Bar" preserve="all"/>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs
new file mode 100644
index 000000000..968d0d1e6
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.cs
@@ -0,0 +1,16 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ public class UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved {
+ public static void Main ()
+ {
+ }
+
+ interface IFoo {
+ }
+
+ [Kept]
+ class Bar : IFoo {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml
new file mode 100644
index 000000000..0cd063a84
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedInterfaceTypeOnTypeWithPreserveNothingIsRemoved/Bar" preserve="nothing"/>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..9fe2b353b
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.cs
@@ -0,0 +1,37 @@
+using System.Collections.Generic;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedMethodPreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ [Kept]
+ private void PreservedMethod ()
+ {
+ }
+
+ [Kept]
+ private void PreservedMethod2 (int arg1, string arg2)
+ {
+ }
+
+ [Kept]
+ private void PreservedMethod3 ()
+ {
+ }
+
+ [Kept]
+ private void PreservedMethod4 (List<int> arg1)
+ {
+ }
+
+ private void NotPreservedMethod ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..d5af5b146
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedMethodPreservedByLinkXmlIsKept.xml
@@ -0,0 +1,10 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedMethodPreservedByLinkXmlIsKept/Unused">
+ <method signature="System.Void PreservedMethod()" />
+ <method signature="System.Void PreservedMethod2(System.Int32,System.String)" />
+ <method name="PreservedMethod3" />
+ <method signature="System.Void PreservedMethod4(System.Collections.Generic.List`1&lt;System.Int32&gt;)" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..5e319acfd
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.cs
@@ -0,0 +1,14 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedNestedTypePreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..7990e8fec
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNestedTypePreservedByLinkXmlIsKept.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedNestedTypePreservedByLinkXmlIsKept/Unused" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs
new file mode 100644
index 000000000..8175ee32e
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.cs
@@ -0,0 +1,10 @@
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ public class UnusedNonRequiredTypeIsRemoved {
+ public static void Main ()
+ {
+ }
+
+ class Unused {
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml
new file mode 100644
index 000000000..168b5aa2c
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedNonRequiredTypeIsRemoved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedNonRequiredTypeIsRemoved/Unused" preserve="all" required="0"/>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..6f21e7b55
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.cs
@@ -0,0 +1,46 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedPropertyPreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty1 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty2 { [Kept] get; set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty3 { get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty4 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty5 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty6 { [Kept] get; set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty7 { get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public int PreservedProperty8 { [Kept] get; [Kept] set; }
+
+ public int NotPreservedProperty { get; set; }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..c606c5445
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedPropertyPreservedByLinkXmlIsKept.xml
@@ -0,0 +1,17 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedPropertyPreservedByLinkXmlIsKept/Unused">
+ <method signature="System.Int32 get_PreservedProperty1()" />
+ <method signature="System.Void set_PreservedProperty1(System.Int32)" />
+ <method signature="System.Int32 get_PreservedProperty2()" />
+ <method signature="System.Void set_PreservedProperty3(System.Int32)" />
+
+ <property signature="System.Int32 PreservedProperty4" />
+ <property signature="System.Int32 PreservedProperty5" accessors="all" />
+ <property signature="System.Int32 PreservedProperty6" accessors="get" />
+ <property signature="System.Int32 PreservedProperty7" accessors="set" />
+
+ <property name="PreservedProperty8" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..bd2b15ba3
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.cs
@@ -0,0 +1,27 @@
+using System;
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ public class UnusedTypeDeclarationPreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+ }
+
+ [Kept]
+ [KeptBaseType (typeof (UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedTypeBase))]
+ class UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedType : UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedTypeBase
+ {
+ int field;
+ static void Method ()
+ {
+ }
+
+ string Prop { get; set; }
+ }
+
+ [Kept]
+ class UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedTypeBase
+ {
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..c99f6b46b
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeDeclarationPreservedByLinkXmlIsKept.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeDeclarationPreservedByLinkXmlIsKeptUnusedType" preserve="nothing" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.cs
new file mode 100644
index 000000000..246c80af6
--- /dev/null
+++ b/test/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/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeIsPresservedWhenEntireAssemblyIsPreserved.xml
new file mode 100644
index 000000000..7ecdb6c22
--- /dev/null
+++ b/test/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/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs
new file mode 100644
index 000000000..edaff63eb
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.cs
@@ -0,0 +1,14 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypePreservedByLinkXmlIsKept {
+ public static void Main ()
+ {
+ }
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class UnusedTypePreservedByLinkXmlIsKeptUnusedType {
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml
new file mode 100644
index 000000000..ffb652e1e
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlIsKept.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypePreservedByLinkXmlIsKeptUnusedType" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs
new file mode 100644
index 000000000..fe077d530
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.cs
@@ -0,0 +1,15 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypePreservedByLinkXmlWithCommentIsKept {
+ public static void Main ()
+ {
+ }
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class UnusedTypePreservedByLinkXmlWithCommentIsKeptUnusedType
+ {
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml
new file mode 100644
index 000000000..a6e5643a2
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypePreservedByLinkXmlWithCommentIsKept.xml
@@ -0,0 +1,6 @@
+<!-- this is a comment -->
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypePreservedByLinkXmlWithCommentIsKeptUnusedType" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs
new file mode 100644
index 000000000..840d7f474
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.cs
@@ -0,0 +1,86 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved
+ {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused {
+ [Kept]
+ public int Field1;
+
+ [Kept]
+ private int Field2;
+
+ [Kept]
+ internal int Field3;
+
+ [Kept]
+ public static int Field4;
+
+ [Kept]
+ private static int Field5;
+
+ [Kept]
+ internal static int Field6;
+
+ [Kept]
+ [KeptBackingField]
+ public string Property1 { [Kept] get; [Kept] set;}
+
+ [Kept]
+ [KeptBackingField]
+ private string Property2 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal string Property3 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public static string Property4 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ private static string Property5 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal static string Property6 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ public void Method1 ()
+ {
+ }
+
+ [Kept]
+ private void Method2 ()
+ {
+ }
+
+ [Kept]
+ internal void Method3 ()
+ {
+ }
+
+ [Kept]
+ public static void Method4 ()
+ {
+ }
+
+ [Kept]
+ private static void Method5 ()
+ {
+ }
+
+ [Kept]
+ internal static void Method6 ()
+ {
+ }
+ }
+ }
+}
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml
new file mode 100644
index 000000000..d84df95e0
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithNoDefinedPreserveHasAllMembersPreserved/Unused" />
+ </assembly>
+</linker>
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs
new file mode 100644
index 000000000..02fb956f2
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.cs
@@ -0,0 +1,85 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypeWithPreserveAllHasAllMembersPreserved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused {
+ [Kept]
+ public int Field1;
+
+ [Kept]
+ private int Field2;
+
+ [Kept]
+ internal int Field3;
+
+ [Kept]
+ public static int Field4;
+
+ [Kept]
+ private static int Field5;
+
+ [Kept]
+ internal static int Field6;
+
+ [Kept]
+ [KeptBackingField]
+ public string Property1 { [Kept] get; [Kept] set;}
+
+ [Kept]
+ [KeptBackingField]
+ private string Property2 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal string Property3 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public static string Property4 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ private static string Property5 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal static string Property6 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ public void Method1 ()
+ {
+ }
+
+ [Kept]
+ private void Method2 ()
+ {
+ }
+
+ [Kept]
+ internal void Method3 ()
+ {
+ }
+
+ [Kept]
+ public static void Method4 ()
+ {
+ }
+
+ [Kept]
+ private static void Method5 ()
+ {
+ }
+
+ [Kept]
+ internal static void Method6 ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml
new file mode 100644
index 000000000..7987a7765
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveAllHasAllMembersPreserved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveAllHasAllMembersPreserved/Unused" preserve="all" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs
new file mode 100644
index 000000000..1af6f4530
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.cs
@@ -0,0 +1,66 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypeWithPreserveFieldsHasMethodsRemoved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ [Kept]
+ public int Field1;
+
+ [Kept]
+ private int Field2;
+
+ [Kept]
+ internal int Field3;
+
+ [Kept]
+ public static int Field4;
+
+ [Kept]
+ private static int Field5;
+
+ [Kept]
+ internal static int Field6;
+
+ public string Property1 { get; set; }
+ private string Property2 { get; set; }
+ internal string Property3 { get; set; }
+ public static string Property4 { get; set; }
+ private static string Property5 { get; set; }
+ internal static string Property6 { get; set; }
+
+ [Kept]
+ public void PreservedMethod ()
+ {
+ }
+
+ public void Method1 ()
+ {
+ }
+
+ private void Method2 ()
+ {
+ }
+
+ internal void Method3 ()
+ {
+ }
+
+ public static void Method4 ()
+ {
+ }
+
+ private static void Method5 ()
+ {
+ }
+
+ internal static void Method6 ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml
new file mode 100644
index 000000000..619a8db26
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveFieldsHasMethodsRemoved.xml
@@ -0,0 +1,7 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveFieldsHasMethodsRemoved/Unused" preserve="fields">
+ <method signature="System.Void PreservedMethod()" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs
new file mode 100644
index 000000000..8a79d2d2b
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.cs
@@ -0,0 +1,74 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypeWithPreserveMethodsHasFieldsRemoved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ [KeptMember (".ctor()")]
+ class Unused {
+ public int Field1;
+ private int Field2;
+ internal int Field3;
+ public static int Field4;
+ private static int Field5;
+ internal static int Field6;
+
+ [Kept]
+ [KeptBackingField]
+ public string Property1 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ private string Property2 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal string Property3 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ public static string Property4 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ private static string Property5 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ [KeptBackingField]
+ internal static string Property6 { [Kept] get; [Kept] set; }
+
+ [Kept]
+ public void Method1 ()
+ {
+ }
+
+ [Kept]
+ private void Method2 ()
+ {
+ }
+
+ [Kept]
+ internal void Method3 ()
+ {
+ }
+
+ [Kept]
+ public static void Method4 ()
+ {
+ }
+
+ [Kept]
+ private static void Method5 ()
+ {
+ }
+
+ [Kept]
+ internal static void Method6 ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml
new file mode 100644
index 000000000..20723f8ed
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveMethodsHasFieldsRemoved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveMethodsHasFieldsRemoved/Unused" preserve="methods" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs
new file mode 100644
index 000000000..b9d404f22
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.cs
@@ -0,0 +1,26 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypeWithPreserveNothingAndPreserveMembers {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ [Kept]
+ public int Field1;
+
+ private int Field2;
+
+ [Kept]
+ public void Method1 ()
+ {
+ }
+
+ private void Method2 ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml
new file mode 100644
index 000000000..d672e9e09
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingAndPreserveMembers.xml
@@ -0,0 +1,8 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveNothingAndPreserveMembers/Unused" preserve="nothing">
+ <field signature="System.Int32 Field1" />
+ <method signature="System.Void Method1()" />
+ </type>
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs
new file mode 100644
index 000000000..d6ea29b89
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.cs
@@ -0,0 +1,50 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ class UnusedTypeWithPreserveNothingHasMembersRemoved {
+ public static void Main ()
+ {
+ }
+
+ [Kept]
+ class Unused {
+ public int Field1;
+ private int Field2;
+ internal int Field3;
+ public static int Field4;
+ private static int Field5;
+ internal static int Field6;
+
+ public string Property1 { get; set; }
+ private string Property2 { get; set; }
+ internal string Property3 { get; set; }
+ public static string Property4 { get; set; }
+ private static string Property5 { get; set; }
+ internal static string Property6 { get; set; }
+
+ public void Method1 ()
+ {
+ }
+
+ private void Method2 ()
+ {
+ }
+
+ internal void Method3 ()
+ {
+ }
+
+ public static void Method4 ()
+ {
+ }
+
+ private static void Method5 ()
+ {
+ }
+
+ internal static void Method6 ()
+ {
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml
new file mode 100644
index 000000000..f76df307a
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UnusedTypeWithPreserveNothingHasMembersRemoved.xml
@@ -0,0 +1,5 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UnusedTypeWithPreserveNothingHasMembersRemoved/Unused" preserve="nothing" />
+ </assembly>
+</linker> \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs
new file mode 100644
index 000000000..37cce219c
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.cs
@@ -0,0 +1,52 @@
+using Mono.Linker.Tests.Cases.Expectations.Assertions;
+
+namespace Mono.Linker.Tests.Cases.LinkXml {
+ public class UsedNonRequiredTypeIsKept {
+ public static void Main ()
+ {
+ var tmp = typeof (Used1).ToString ();
+ tmp = typeof (Used2).ToString ();
+ tmp = typeof (Used3).ToString ();
+ }
+
+ class Used1 {
+ [Kept]
+ public int field;
+
+ public void Method ()
+ {
+ }
+
+ public int Property { get; set; }
+ }
+
+ [KeptMember (".ctor()")]
+ class Used2 {
+ public int field;
+
+ [Kept]
+ public void Method ()
+ {
+ }
+
+ [Kept]
+ [KeptBackingField]
+ public int Property { [Kept] get; [Kept] set; }
+ }
+
+ [KeptMember (".ctor()")]
+ class Used3 {
+ [Kept]
+ public int field;
+
+ [Kept]
+ public void Method ()
+ {
+ }
+
+ [Kept]
+ [KeptBackingField]
+ public int Property { [Kept] get; [Kept] set; }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml
new file mode 100644
index 000000000..2294c4f4f
--- /dev/null
+++ b/test/Mono.Linker.Tests.Cases/LinkXml/UsedNonRequiredTypeIsKept.xml
@@ -0,0 +1,7 @@
+<linker>
+ <assembly fullname="test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UsedNonRequiredTypeIsKept/Used1" preserve="fields" required="0"/>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UsedNonRequiredTypeIsKept/Used2" preserve="methods" required="0"/>
+ <type fullname="Mono.Linker.Tests.Cases.LinkXml.UsedNonRequiredTypeIsKept/Used3" preserve="all" required="0"/>
+ </assembly>
+</linker> \ No newline at end of file