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:
authorMateo Torres-Ruiz <mateoatr@users.noreply.github.com>2021-08-03 19:02:56 +0300
committerGitHub <noreply@github.com>2021-08-03 19:02:56 +0300
commit4de1a3d6d2334bae347c35e1921ce4ee85db4447 (patch)
treeebe34b98830af22ecf300b173949f7b054907054 /test/ILLink.RoslynAnalyzer.Tests
parentae18468b8712503aee67911228dd921601bd423a (diff)
Add `dynamic` analyzer (#2150)
* Use DiagnosticId * Update test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs Co-authored-by: Andy Gocke <angocke@microsoft.com> * Lint Co-authored-by: Andy Gocke <angocke@microsoft.com>
Diffstat (limited to 'test/ILLink.RoslynAnalyzer.Tests')
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs b/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
index 4f26b6bb1..987406d37 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
@@ -19,6 +19,8 @@ namespace ILLink.RoslynAnalyzer.Tests
{
public class RequiresUnreferencedCodeAnalyzerTests
{
+ static readonly DiagnosticDescriptor dynamicInvocationDiagnosticDescriptor = DiagnosticDescriptors.GetDiagnosticDescriptor (DiagnosticId.RequiresUnreferencedCode, new DiagnosticString ("DynamicTypeInvocation"));
+
static Task VerifyRequiresUnreferencedCodeAnalyzer (string source, params DiagnosticResult[] expected) =>
VerifyRequiresUnreferencedCodeAnalyzer (source, null, expected);
@@ -862,5 +864,61 @@ class AnotherImplementation : IRAF
// (13,3): warning IL2046: Member 'Implementation.StringProperty.get' with 'RequiresUnreferencedCodeAttribute' implements interface member 'IRAF.StringProperty.get' without 'RequiresUnreferencedCodeAttribute'. Attributes must match across all interface implementations or overrides.
VerifyCS.Diagnostic (DiagnosticId.RequiresUnreferencedCodeAttributeMismatch).WithSpan (13, 3, 13, 6).WithArguments ("Member 'Implementation.StringProperty.get' with 'RequiresUnreferencedCodeAttribute' implements interface member 'IRAF.StringProperty.get' without 'RequiresUnreferencedCodeAttribute'"));
}
+
+ [Fact]
+ public Task InvocationOnDynamicType ()
+ {
+ var source = @"
+using System;
+class C
+{
+ static void M0 ()
+ {
+ dynamic dynamicField = ""Some string"";
+ Console.WriteLine (dynamicField);
+ }
+
+ static void M1 ()
+ {
+ MethodWithDynamicArgDoNothing (0);
+ MethodWithDynamicArgDoNothing (""Some string"");
+ MethodWithDynamicArg(-1);
+ }
+
+ static void MethodWithDynamicArgDoNothing (dynamic arg)
+ {
+ }
+
+ static void MethodWithDynamicArg (dynamic arg)
+ {
+ arg.MethodWithDynamicArg (arg);
+ }
+}";
+
+ return VerifyRequiresUnreferencedCodeAnalyzer (source,
+ // (8,3): warning IL2026: Invoking members on dynamic types is not trimming safe. Types or member might have been removed by the trimmer.
+ VerifyCS.Diagnostic (dynamicInvocationDiagnosticDescriptor).WithSpan (8, 3, 8, 35),
+ // (24,3): warning IL2026: Invoking members on dynamic types is not trimming safe. Types or member might have been removed by the trimmer.
+ VerifyCS.Diagnostic (dynamicInvocationDiagnosticDescriptor).WithSpan (24, 3, 24, 33));
+ }
+
+ [Fact]
+ public Task InvocationOnDynamicTypeInMethodWithRUCDoesNotWarnTwoTimes ()
+ {
+ var source = @"
+using System;
+using System.Diagnostics.CodeAnalysis;
+class C
+{
+ [RequiresUnreferencedCode (""We should only see the warning related to this annotation, and none about the dynamic type."")]
+ static void M0 ()
+ {
+ dynamic dynamicField = ""Some string"";
+ Console.WriteLine (dynamicField);
+ }
+}";
+
+ return VerifyRequiresUnreferencedCodeAnalyzer (source);
+ }
}
}