diff options
author | Tlakaelel Axayakatl Ceja <tlakaelel.ceja@microsoft.com> | 2021-03-17 19:49:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-17 19:49:18 +0300 |
commit | 75b1c3003bc12139c3a918705da5a4c12e7cb37b (patch) | |
tree | 7661cfee3b8ce491b8bbbefe6b908df0771ecaa6 /test/ILLink.RoslynAnalyzer.Tests | |
parent | 3bcc9beeb37b4bae37b419dd3d226a5209a0a4dc (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.cs | 9 | ||||
-rw-r--r-- | test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs | 27 |
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--", "") + ); + } } } |