diff options
author | dotnet bot <dotnet-bot@dotnetfoundation.org> | 2022-01-07 15:04:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-07 15:04:19 +0300 |
commit | 89ae0f07830215484f1fa7022ab41d66523c9962 (patch) | |
tree | a02a4734de52468360eb13fa76e44575dca257cb | |
parent | e98f3c9ca3a4a8e50be1981ac97b58a2dfcdb1aa (diff) | |
parent | 5b33e3ad8f422d002ffe84700a0e51b976391f2b (diff) |
Merge pull request #2486 from dotnet/merges/release/6.0.2xx-to-main
Merge release/6.0.2xx to main
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 (); + } + } } } |