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:
authorJackson Schuster <jschuster@microsoft.com>2021-12-14 21:38:24 +0300
committerJackson Schuster <jschuster@microsoft.com>2021-12-14 21:46:02 +0300
commit930bb85aaed849136b75814510de9c35cc1cbf03 (patch)
tree8eb9d840fdc938bcf8ebebcc0ee5bd98bc5d9be8
parent6a83b625eba3e5da09061f19e83870a600f0177d (diff)
Replace '/' with '.' in IL2109 warning paths
-rw-r--r--src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs2
-rw-r--r--src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.cs43
-rw-r--r--src/ILLink.Shared/DiagnosticId.cs2
-rw-r--r--src/ILLink.Shared/SharedStrings.resx4
-rw-r--r--src/linker/Linker.Steps/MarkStep.cs2
-rw-r--r--src/linker/Linker/MemberReferenceExtensions.cs3
-rw-r--r--src/linker/Linker/MessageContainer.cs2
-rw-r--r--test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresCapability.cs17
8 files changed, 31 insertions, 44 deletions
diff --git a/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs b/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
index 73bdfb9e9..8c06d5d38 100644
--- a/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
+++ b/src/ILLink.RoslynAnalyzer/RequiresAnalyzerBase.cs
@@ -329,7 +329,7 @@ namespace ILLink.RoslynAnalyzer
url));
}
- protected void ReportMismatchInAttributesDiagnostic (SymbolAnalysisContext symbolAnalysisContext, ISymbol member, ISymbol baseMember, bool isInterface = false)
+ private void ReportMismatchInAttributesDiagnostic (SymbolAnalysisContext symbolAnalysisContext, ISymbol member, ISymbol baseMember, bool isInterface = false)
{
string message = MessageFormat.FormatRequiresAttributeMismatch (member.HasAttribute (RequiresAttributeName), isInterface, RequiresAttributeName, member.GetDisplayName (), baseMember.GetDisplayName ());
symbolAnalysisContext.ReportDiagnostic (Diagnostic.Create (
diff --git a/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.cs b/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.cs
index 71a5f9660..5eabad1bc 100644
--- a/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.cs
+++ b/src/ILLink.RoslynAnalyzer/RequiresUnreferencedCodeAnalyzer.cs
@@ -23,7 +23,7 @@ namespace ILLink.RoslynAnalyzer
static readonly DiagnosticDescriptor s_makeGenericTypeRule = DiagnosticDescriptors.GetDiagnosticDescriptor (DiagnosticId.MakeGenericType);
static readonly DiagnosticDescriptor s_makeGenericMethodRule = DiagnosticDescriptors.GetDiagnosticDescriptor (DiagnosticId.MakeGenericMethod);
- static readonly DiagnosticDescriptor s_typeDerivesFromRucClassRule = DiagnosticDescriptors.GetDiagnosticDescriptor (DiagnosticId.DerivedClassRequiresUnreferencedCodeAttributeMismatch);
+ static readonly DiagnosticDescriptor s_typeDerivesFromRucClassRule = DiagnosticDescriptors.GetDiagnosticDescriptor (DiagnosticId.RequiresOnBaseClass);
static readonly Action<OperationAnalysisContext> s_dynamicTypeInvocation = operationContext => {
if (FindContainingSymbol (operationContext, DiagnosticTargets.All) is ISymbol containingSymbol &&
@@ -33,29 +33,26 @@ namespace ILLink.RoslynAnalyzer
operationContext.ReportDiagnostic (Diagnostic.Create (s_dynamicTypeInvocationRule,
operationContext.Operation.Syntax.GetLocation ()));
};
- [System.Diagnostics.CodeAnalysis.SuppressMessage ("MicrosoftCodeAnalysisPerformance", "RS1008:Avoid storing per-compilation data into the fields of a diagnostic analyzer", Justification = "Temporarily stored as a local variable in a lambda, not as a field")]
- readonly Action<SymbolAnalysisContext> s_typeDerivesFromRucBase = symbolAnalysisContext => {
- if (symbolAnalysisContext.Symbol is INamedTypeSymbol typeSymbol && !typeSymbol.HasAttribute (RequiresUnreferencedCodeAttribute)) {
- if (typeSymbol.BaseType is INamedTypeSymbol baseType && baseType.HasAttribute (RequiresUnreferencedCodeAttribute)) {
- if (baseType.TryGetAttribute (RequiresUnreferencedCodeAttribute, out var requiresUnreferencedCodeAttribute)) {
- //string message = MessageFormat.FormatRequiresAttributeMismatch (typeSymbol.HasAttribute (RequiresUnreferencedCodeAttribute), false, RequiresUnreferencedCodeAttribute, typeSymbol.GetDisplayName (), baseType.GetDisplayName ());
- //symbolAnalysisContext.ReportDiagnostic (Diagnostic.Create (
- // s_typeDerivesFromRucClassRule,
- // typeSymbol.Locations[0],
- // message));
- var diag = Diagnostic.Create (s_typeDerivesFromRucClassRule,
- typeSymbol.Locations[0],
- typeSymbol.GetDisplayName (),
- baseType.GetDisplayName (),
- baseType.Name,
- GetUrlFromAttribute (requiresUnreferencedCodeAttribute));
- symbolAnalysisContext.ReportDiagnostic (diag);
+
+ private Action<SymbolAnalysisContext> typeDerivesFromRucBase {
+ get {
+ return symbolAnalysisContext => {
+ if (symbolAnalysisContext.Symbol is INamedTypeSymbol typeSymbol && !typeSymbol.HasAttribute (RequiresUnreferencedCodeAttribute)) {
+ if (typeSymbol.BaseType is INamedTypeSymbol baseType && baseType.HasAttribute (RequiresUnreferencedCodeAttribute)) {
+ if (baseType.TryGetAttribute (RequiresUnreferencedCodeAttribute, out var requiresUnreferencedCodeAttribute)) {
+ var diag = Diagnostic.Create (s_typeDerivesFromRucClassRule,
+ typeSymbol.Locations[0],
+ typeSymbol,
+ baseType.GetDisplayName (),
+ GetMessageFromAttribute (requiresUnreferencedCodeAttribute),
+ GetUrlFromAttribute (requiresUnreferencedCodeAttribute));
+ symbolAnalysisContext.ReportDiagnostic (diag);
+ }
+ }
}
- }
+ };
}
-
-
- };
+ }
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics =>
ImmutableArray.Create (s_dynamicTypeInvocationRule, s_makeGenericMethodRule, s_makeGenericTypeRule, s_requiresUnreferencedCodeRule, s_requiresUnreferencedCodeAttributeMismatch, s_typeDerivesFromRucClassRule);
@@ -102,7 +99,7 @@ namespace ILLink.RoslynAnalyzer
return false;
}
private protected override ImmutableArray<(Action<SymbolAnalysisContext> Action, SymbolKind[] SymbolKind)> ExtraSymbolActions =>
- ImmutableArray.Create<(Action<SymbolAnalysisContext> Action, SymbolKind[] SymbolKind)> ((s_typeDerivesFromRucBase, new SymbolKind[] { SymbolKind.NamedType }));
+ ImmutableArray.Create<(Action<SymbolAnalysisContext> Action, SymbolKind[] SymbolKind)> ((typeDerivesFromRucBase, new SymbolKind[] { SymbolKind.NamedType }));
diff --git a/src/ILLink.Shared/DiagnosticId.cs b/src/ILLink.Shared/DiagnosticId.cs
index 8ba3fcf2e..43f6394ac 100644
--- a/src/ILLink.Shared/DiagnosticId.cs
+++ b/src/ILLink.Shared/DiagnosticId.cs
@@ -8,7 +8,7 @@
CorrectnessOfCOMCannotBeGuaranteed = 2050,
MakeGenericType = 2055,
MakeGenericMethod = 2060,
- DerivedClassRequiresUnreferencedCodeAttributeMismatch = 2109,
+ RequiresOnBaseClass = 2109,
RequiresUnreferencedCodeOnStaticConstructor = 2116,
// Single-file diagnostic ids.
diff --git a/src/ILLink.Shared/SharedStrings.resx b/src/ILLink.Shared/SharedStrings.resx
index af62c70ce..6f5d57a28 100644
--- a/src/ILLink.Shared/SharedStrings.resx
+++ b/src/ILLink.Shared/SharedStrings.resx
@@ -192,8 +192,4 @@
<data name="CorrectnessOfCOMCannotBeGuaranteedMessage" xml:space="preserve">
<value>P/invoke method '{0}' declares a parameter with COM marshalling. Correctness of COM interop cannot be guaranteed after trimming. Interfaces and interface members might be removed.</value>
</data>
- <data name="DerivedClassRequiresUnreferencedCodeAttributeMismatchMessage" xml:space="preserve">
- <value>{0}: Type '{0}' derives from '{1}' which has 'RequiresUnreferencedCodeAttribute'. --{2}--.</value>
- <comment>IL2109 for RequiresUnreferenedCode only</comment>
- </data>
</root> \ No newline at end of file
diff --git a/src/linker/Linker.Steps/MarkStep.cs b/src/linker/Linker.Steps/MarkStep.cs
index 524c9195e..8f5b43414 100644
--- a/src/linker/Linker.Steps/MarkStep.cs
+++ b/src/linker/Linker.Steps/MarkStep.cs
@@ -1900,7 +1900,7 @@ namespace Mono.Linker.Steps
string formatString = SharedStrings.RequiresOnBaseClassMessage;
string arg1 = MessageFormat.FormatRequiresAttributeMessageArg (effectiveRequiresUnreferencedCode.Message);
string arg2 = MessageFormat.FormatRequiresAttributeUrlArg (effectiveRequiresUnreferencedCode.Url);
- string message = string.Format (formatString, type, type.BaseType.GetDisplayName (), arg1, arg2);
+ string message = string.Format (formatString, type.GetDisplayName (), type.BaseType.GetDisplayName (), arg1, arg2);
Context.LogWarning (message, 2109, currentOrigin, MessageSubCategory.TrimAnalysis);
}
diff --git a/src/linker/Linker/MemberReferenceExtensions.cs b/src/linker/Linker/MemberReferenceExtensions.cs
index b24364aaa..14278fdef 100644
--- a/src/linker/Linker/MemberReferenceExtensions.cs
+++ b/src/linker/Linker/MemberReferenceExtensions.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Diagnostics;
+using System.Diagnostics;
using System.Text;
using Mono.Cecil;
diff --git a/src/linker/Linker/MessageContainer.cs b/src/linker/Linker/MessageContainer.cs
index 89d51ff97..1e8b999aa 100644
--- a/src/linker/Linker/MessageContainer.cs
+++ b/src/linker/Linker/MessageContainer.cs
@@ -256,6 +256,8 @@ namespace Mono.Linker
if (Origin?.Provider != null) {
if (Origin?.Provider is MethodDefinition method)
sb.Append (method.GetDisplayName ());
+ else if (Origin?.Provider is TypeDefinition type)
+ sb.Append (type.GetDisplayName ());
else if (Origin?.Provider is IMemberDefinition member)
sb.Append (member.FullName);
else if (Origin?.Provider is AssemblyDefinition assembly)
diff --git a/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresCapability.cs b/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresCapability.cs
index 68a25e7f3..bc62a5462 100644
--- a/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresCapability.cs
+++ b/test/Mono.Linker.Tests.Cases/RequiresCapability/RequiresCapability.cs
@@ -1227,9 +1227,7 @@ namespace Mono.Linker.Tests.Cases.RequiresCapability
public static void MethodWithRequires () { }
}
- [ExpectedWarning ("IL2109", "RequiresOnClass/DerivedWithoutRequires", "RequiresOnClass.ClassWithRequires", "--ClassWithRequires--", ProducedBy = ProducedBy.Trimmer)]
- [ExpectedWarning ("IL2109", "RequiresOnClass.DerivedWithoutRequires", "RequiresOnClass.ClassWithRequires", "--ClassWithRequires--", ProducedBy = ProducedBy.Analyzer)]
-
+ [ExpectedWarning ("IL2109", "RequiresOnClass.DerivedWithoutRequires", "RequiresOnClass.ClassWithRequires", "--ClassWithRequires--")]
private class DerivedWithoutRequires : ClassWithRequires
{
public static void StaticMethodInInheritedClass () { }
@@ -1401,9 +1399,7 @@ namespace Mono.Linker.Tests.Cases.RequiresCapability
// A nested class is not considered a static method nor constructor therefore RequiresUnreferencedCode doesnt apply
// and this warning is not suppressed
- [ExpectedWarning ("IL2109", "RequiresOnClass/DerivedWithRequires2/DerivedNestedClass", "--ClassWithRequires--", ProducedBy = ProducedBy.Trimmer)]
- [ExpectedWarning ("IL2109", "RequiresOnClass.DerivedWithRequires2.DerivedNestedClass", "--ClassWithRequires--", ProducedBy = ProducedBy.Analyzer)]
-
+ [ExpectedWarning ("IL2109", "RequiresOnClass.DerivedWithRequires2.DerivedNestedClass", "--ClassWithRequires--")]
public class DerivedNestedClass : ClassWithRequires
{
public static void NestedStaticMethod () { }
@@ -1633,8 +1629,7 @@ namespace Mono.Linker.Tests.Cases.RequiresCapability
public BaseWithRequires () { }
}
- [ExpectedWarning ("IL2109", "ReflectionAccessOnCtor/DerivedWithoutRequires", "ReflectionAccessOnCtor.BaseWithRequires", ProducedBy = ProducedBy.Trimmer)]
- [ExpectedWarning ("IL2109", "ReflectionAccessOnCtor.DerivedWithoutRequires", "ReflectionAccessOnCtor.BaseWithRequires", ProducedBy = ProducedBy.Analyzer)]
+ [ExpectedWarning ("IL2109", "ReflectionAccessOnCtor.DerivedWithoutRequires", "ReflectionAccessOnCtor.BaseWithRequires")]
class DerivedWithoutRequires : BaseWithRequires
{
[ExpectedWarning ("IL2026", "--BaseWithRequires--", ProducedBy = ProducedBy.Trimmer)] // The body has direct call to the base.ctor()
@@ -1708,8 +1703,7 @@ namespace Mono.Linker.Tests.Cases.RequiresCapability
public int InstanceField;
}
- [ExpectedWarning ("IL2109", "ReflectionAccessOnField/DerivedWithoutRequires", "ReflectionAccessOnField.WithRequires", ProducedBy = ProducedBy.Trimmer)]
- [ExpectedWarning ("IL2109", "ReflectionAccessOnField.DerivedWithoutRequires", "ReflectionAccessOnField.WithRequires", ProducedBy = ProducedBy.Analyzer)]
+ [ExpectedWarning ("IL2109", "ReflectionAccessOnField.DerivedWithoutRequires", "ReflectionAccessOnField.WithRequires")]
class DerivedWithoutRequires : WithRequires
{
public static int DerivedStaticField;
@@ -1833,8 +1827,7 @@ namespace Mono.Linker.Tests.Cases.RequiresCapability
public int InstnaceProperty { get; set; }
}
- [ExpectedWarning ("IL2109", "ReflectionAccessOnProperties/DerivedWithoutRequires", "ReflectionAccessOnProperties.WithRequires", ProducedBy = ProducedBy.Trimmer)]
- [ExpectedWarning ("IL2109", "ReflectionAccessOnProperties.DerivedWithoutRequires", "ReflectionAccessOnProperties.WithRequires", ProducedBy = ProducedBy.Analyzer)]
+ [ExpectedWarning ("IL2109", "ReflectionAccessOnProperties.DerivedWithoutRequires", "ReflectionAccessOnProperties.WithRequires")]
class DerivedWithoutRequires : WithRequires
{
public static int DerivedStaticProperty { get; set; }