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:
authorTlakaelel Axayakatl Ceja <tlakaelel.ceja@microsoft.com>2021-03-17 19:49:18 +0300
committerGitHub <noreply@github.com>2021-03-17 19:49:18 +0300
commit75b1c3003bc12139c3a918705da5a4c12e7cb37b (patch)
tree7661cfee3b8ce491b8bbbefe6b908df0771ecaa6 /test/ILLink.RoslynAnalyzer.Tests
parent3bcc9beeb37b4bae37b419dd3d226a5209a0a4dc (diff)
Analyzer can warn on more RequiresUnreferencedCode cases (#1897)
Add support in analyzer to detect RUC in overridden methods Add support in analyzer to detect RUC in static constructors Add test for overridden property
Diffstat (limited to 'test/ILLink.RoslynAnalyzer.Tests')
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/LinkerTestCases.cs9
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs27
2 files changed, 31 insertions, 5 deletions
diff --git a/test/ILLink.RoslynAnalyzer.Tests/LinkerTestCases.cs b/test/ILLink.RoslynAnalyzer.Tests/LinkerTestCases.cs
index 15b28ae7a..c26f6f9a4 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/LinkerTestCases.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/LinkerTestCases.cs
@@ -19,14 +19,13 @@ namespace ILLink.RoslynAnalyzer.Tests
{
switch (m.Identifier.ValueText) {
case "MethodWithDuplicateRequiresAttribute":
- case "TestCovariantReturnCallOnDerived":
case "TestRequiresUnreferencedCodeOnlyThroughReflection":
- case "TestStaticCctorRequiresUnreferencedCode":
- case "TestStaticCtorMarkingIsTriggeredByFieldAccess":
- case "TestTypeWhichOverridesMethodVirtualMethodRequiresUnreferencedCode":
case "TestRequiresInMethodFromCopiedAssembly":
case "TestRequiresThroughReflectionInMethodFromCopiedAssembly":
- case "TestStaticCtorTriggeredByMethodCall":
+ // There is a discrepancy between the way linker and the analyzer represent the location of the error,
+ // linker will point to the method caller and the analyzer will point to a line of code.
+ // The TestTypeIsBeforeFieldInit scenario is supported by the analyzer, just the diagnostic message is different
+ // We verify the analyzer generating the right diagnostic in RequiresUnreferencedCodeAnalyzerTests.cs
case "TestTypeIsBeforeFieldInit":
return;
}
diff --git a/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs b/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
index 275880ccb..34faf97fc 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
@@ -106,5 +106,32 @@ class C
VerifyCS.Diagnostic ().WithSpan (8, 3, 8, 19).WithArguments ("C.PropertyRequires.set", "Message for --setter PropertyRequires--", "")
);
}
+
+ [Fact]
+ public Task TypeIsBeforeFieldInit ()
+ {
+ var TypeIsBeforeFieldInit = @"
+using System.Diagnostics.CodeAnalysis;
+
+class C
+{
+ class TypeIsBeforeFieldInit
+ {
+ public static int field = AnnotatedMethod ();
+
+ [RequiresUnreferencedCode (""Message from --TypeIsBeforeFieldInit.AnnotatedMethod--"")]
+ public static int AnnotatedMethod () => 42;
+ }
+
+ static void TestTypeIsBeforeFieldInit ()
+ {
+ var x = TypeIsBeforeFieldInit.field + 42;
+ }
+}";
+ return VerifyRequiresUnreferencedCodeAnalyzer (TypeIsBeforeFieldInit,
+ // (8,29): warning IL2026: Using method 'C.TypeIsBeforeFieldInit.AnnotatedMethod()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. Message from --TypeIsBeforeFieldInit.AnnotatedMethod--.
+ VerifyCS.Diagnostic ().WithSpan (8, 29, 8, 47).WithArguments ("C.TypeIsBeforeFieldInit.AnnotatedMethod()", "Message from --TypeIsBeforeFieldInit.AnnotatedMethod--", "")
+ );
+ }
}
}