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:
-rw-r--r--src/linker/Linker.Dataflow/ReflectionMethodBodyScanner.cs3
-rw-r--r--test/Mono.Linker.Tests.Cases/DataFlow/TypeBaseTypeDataFlow.cs8
-rw-r--r--test/Mono.Linker.Tests.Cases/Reflection/TypeUsedViaReflection.cs38
3 files changed, 49 insertions, 0 deletions
diff --git a/src/linker/Linker.Dataflow/ReflectionMethodBodyScanner.cs b/src/linker/Linker.Dataflow/ReflectionMethodBodyScanner.cs
index 67ce51fe0..f8386203d 100644
--- a/src/linker/Linker.Dataflow/ReflectionMethodBodyScanner.cs
+++ b/src/linker/Linker.Dataflow/ReflectionMethodBodyScanner.cs
@@ -1293,6 +1293,9 @@ namespace Mono.Linker.Dataflow
if (dynamicallyAccessedMemberNode.DynamicallyAccessedMemberTypes.HasFlag (DynamicallyAccessedMemberTypes.PublicProperties))
propagatedMemberTypes |= DynamicallyAccessedMemberTypes.PublicProperties;
+
+ if (dynamicallyAccessedMemberNode.DynamicallyAccessedMemberTypes.HasFlag (DynamicallyAccessedMemberTypes.Interfaces))
+ propagatedMemberTypes |= DynamicallyAccessedMemberTypes.Interfaces;
}
methodReturnValue = MergePointValue.MergeValues (methodReturnValue, CreateMethodReturnValue (calledMethod, propagatedMemberTypes));
diff --git a/test/Mono.Linker.Tests.Cases/DataFlow/TypeBaseTypeDataFlow.cs b/test/Mono.Linker.Tests.Cases/DataFlow/TypeBaseTypeDataFlow.cs
index abe5aaada..68d232252 100644
--- a/test/Mono.Linker.Tests.Cases/DataFlow/TypeBaseTypeDataFlow.cs
+++ b/test/Mono.Linker.Tests.Cases/DataFlow/TypeBaseTypeDataFlow.cs
@@ -34,6 +34,8 @@ namespace Mono.Linker.Tests.Cases.DataFlow
TestNonPublicNestedTypesAreNotPropagated (typeof (TestType));
TestNonPublicPropertiesAreNotPropagated (typeof (TestType));
+ TestInterfacesPropagated (typeof (TestType));
+
TestCombinationOfPublicsIsPropagated (typeof (TestType));
TestCombinationOfNonPublicsIsNotPropagated (typeof (TestType));
TestCombinationOfPublicAndNonPublicsPropagatesPublicOnly (typeof (TestType));
@@ -165,6 +167,12 @@ namespace Mono.Linker.Tests.Cases.DataFlow
}
[RecognizedReflectionAccessPattern]
+ static void TestInterfacesPropagated ([DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)] Type derivedType)
+ {
+ derivedType.BaseType.RequiresInterfaces ();
+ }
+
+ [RecognizedReflectionAccessPattern]
static void TestCombinationOfPublicsIsPropagated (
[DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicProperties)] Type derivedType)
{
diff --git a/test/Mono.Linker.Tests.Cases/Reflection/TypeUsedViaReflection.cs b/test/Mono.Linker.Tests.Cases/Reflection/TypeUsedViaReflection.cs
index 1907cd653..0f660e6ed 100644
--- a/test/Mono.Linker.Tests.Cases/Reflection/TypeUsedViaReflection.cs
+++ b/test/Mono.Linker.Tests.Cases/Reflection/TypeUsedViaReflection.cs
@@ -42,6 +42,8 @@ namespace Mono.Linker.Tests.Cases.Reflection
TestUnkownIgnoreCase3Params (1);
TestUnkownIgnoreCase5Params (1);
TestGenericTypeWithAnnotations ();
+
+ BaseTypeInterfaces.Test ();
}
[Kept]
@@ -409,5 +411,41 @@ namespace Mono.Linker.Tests.Cases.Reflection
" test, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null";
Type.GetType (reflectionTypeKeptString);
}
+
+ [Kept]
+ class BaseTypeInterfaces
+ {
+ [Kept]
+ interface ITest
+ {
+ [Kept]
+ void Method ();
+ }
+
+ [Kept]
+ [KeptInterface (typeof (ITest))]
+ class BaseType : ITest
+ {
+ [Kept]
+ public void Method () { }
+ }
+
+ [Kept]
+ [KeptBaseType (typeof (BaseType))]
+ [KeptInterface (typeof (ITest))]
+ class DerivedType : BaseType, ITest
+ {
+ [Kept]
+ public void Method () { }
+ }
+
+ [Kept]
+ public static void Test ()
+ {
+ ITest t = null;
+ t.Method ();
+ typeof (DerivedType).GetInterfaces ();
+ }
+ }
}
}