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:
authorJeremi Kurdek <59935235+jkurdek@users.noreply.github.com>2022-07-29 23:06:12 +0300
committerGitHub <noreply@github.com>2022-07-29 23:06:12 +0300
commit27b0c91329125f07e73d5c366b8a0cd9fdd12bb7 (patch)
treee531ed86687cec30e42f0cb14c4c0d1dcabe3938
parent65e21d78731ae5825b3921a870221fbc8fdeee67 (diff)
Added support for suppressions on properties (#2925)
Suppressions can be now placed on properties and events.
-rw-r--r--src/linker/Linker/UnconditionalSuppressMessageAttributeState.cs12
-rw-r--r--test/Mono.Linker.Tests.Cases/Warnings/WarningSuppression/SuppressWarningsInMembersAndTypes.cs58
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