diff options
author | Jeremi Kurdek <59935235+jkurdek@users.noreply.github.com> | 2022-07-29 23:06:12 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-29 23:06:12 +0300 |
commit | 27b0c91329125f07e73d5c366b8a0cd9fdd12bb7 (patch) | |
tree | e531ed86687cec30e42f0cb14c4c0d1dcabe3938 | |
parent | 65e21d78731ae5825b3921a870221fbc8fdeee67 (diff) |
Added support for suppressions on properties (#2925)
Suppressions can be now placed on properties and events.
-rw-r--r-- | src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs | 12 | ||||
-rw-r--r-- | test/Mono.Linker.Tests.Cases/Warnings/WarningSuppression/SuppressWarningsInMembersAndTypes.cs | 58 |
2 files changed, 70 insertions, 0 deletions
diff --git a/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs b/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs index 2d7983a31..086e8c9aa 100644 --- a/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs +++ b/src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs @@ -78,6 +78,18 @@ namespace Mono.Linker if (IsSuppressedOnElement (id, warningOriginMember, out info)) return true; + if (warningOriginMember is MethodDefinition method) { + if (method.TryGetProperty (out var property)) { + Debug.Assert (property.DeclaringType == warningOriginMember.DeclaringType); + warningOriginMember = property; + continue; + } else if (method.TryGetEvent (out var @event)) { + Debug.Assert (@event.DeclaringType == warningOriginMember.DeclaringType); + warningOriginMember = @event; + continue; + } + } + warningOriginMember = warningOriginMember.DeclaringType; } } diff --git a/test/Mono.Linker.Tests.Cases/Warnings/WarningSuppression/SuppressWarningsInMembersAndTypes.cs b/test/Mono.Linker.Tests.Cases/Warnings/WarningSuppression/SuppressWarningsInMembersAndTypes.cs index 7466f5238..43ea7db14 100644 --- a/test/Mono.Linker.Tests.Cases/Warnings/WarningSuppression/SuppressWarningsInMembersAndTypes.cs +++ b/test/Mono.Linker.Tests.Cases/Warnings/WarningSuppression/SuppressWarningsInMembersAndTypes.cs @@ -21,6 +21,8 @@ namespace Mono.Linker.Tests.Cases.Warnings.WarningSuppression suppressWarningsInType.Warning2 (); var nestedType = new SuppressWarningsInType.NestedType (); nestedType.Warning3 (); + var property = suppressWarningsInType.Property; + suppressWarningsInType.Event += SuppressWarningsInType.EventSubscriber; var suppressWarningsInMembers = new SuppressWarningsInMembers (); suppressWarningsInMembers.Method (); @@ -30,6 +32,10 @@ namespace Mono.Linker.Tests.Cases.Warnings.WarningSuppression NestedType.Warning (); SuppressOnTypeMarkedEntirely.Test (); + + SuppressOnProperty.Test (); + + SuppressOnEvent.Test (); } public static Type TriggerUnrecognizedPattern () @@ -73,6 +79,23 @@ namespace Mono.Linker.Tests.Cases.Warnings.WarningSuppression Warning4 (); } } + + public int Property { + get { + Expression.Call (SuppressWarningsInMembersAndTypes.TriggerUnrecognizedPattern (), "", Type.EmptyTypes); + return 0; + } + } + + public static void EventSubscriber (object sender, EventArgs e) + { + + } + + public event EventHandler<EventArgs> Event { + add { Expression.Call (SuppressWarningsInMembersAndTypes.TriggerUnrecognizedPattern (), "", Type.EmptyTypes); } + remove { } + } } public class SuppressWarningsInMembers @@ -128,4 +151,39 @@ namespace Mono.Linker.Tests.Cases.Warnings.WarningSuppression [RequiresUnreferencedCode ("")] static void MethodWithRUC () { } } + + class SuppressOnProperty + { + public static void Test () + { + var test = Property; + } + + [UnconditionalSuppressMessage ("Test", "IL2072")] + static int Property { + get { + Expression.Call (SuppressWarningsInMembersAndTypes.TriggerUnrecognizedPattern (), "", Type.EmptyTypes); + return 0; + } + } + } + + class SuppressOnEvent + { + public static void Test () + { + Event += EventSubscriber; + } + + static void EventSubscriber (object sender, EventArgs e) + { + + } + + [UnconditionalSuppressMessage ("Test", "IL2072")] + static event EventHandler<EventArgs> Event { + add { Expression.Call (SuppressWarningsInMembersAndTypes.TriggerUnrecognizedPattern (), "", Type.EmptyTypes); } + remove { } + } + } }
\ No newline at end of file |