Procházet zdrojové kódy

Fix warnings in analyzer packages (#24837)

Youssef Victor před 5 roky
rodič
revize
60cb3bb5c4

+ 0 - 3
Directory.Build.props

@@ -100,9 +100,6 @@
 
     <!-- xUnit1004 = warns about skipped tests. Make this a non-fatal build warning. -->
     <WarningsNotAsErrors>$(WarningsNotAsErrors);xUnit1004</WarningsNotAsErrors>
-
-    <!-- Ignore specific Roslyn warnings for now, https://github.com/dotnet/aspnetcore/issues/22090 -->
-    <NoWarn Condition="'$(IsAnalyzersProject)' == 'true'">$(NoWarn);RS1024;RS1025;RS1026</NoWarn>
   </PropertyGroup>
 
   <!-- Source code settings -->

+ 4 - 4
src/Components/Analyzers/src/ComponentFacts.cs

@@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers
 
             return property.GetAttributes().Any(a =>
             {
-                return a.AttributeClass == symbols.ParameterAttribute || a.AttributeClass == symbols.CascadingParameterAttribute;
+                return SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.ParameterAttribute) || SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.CascadingParameterAttribute);
             });
         }
 
@@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers
                 throw new ArgumentNullException(nameof(property));
             }
 
-            return property.GetAttributes().Any(a => a.AttributeClass == symbols.ParameterAttribute);
+            return property.GetAttributes().Any(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.ParameterAttribute));
         }
 
         public static bool IsParameterWithCaptureUnmatchedValues(ComponentSymbols symbols, IPropertySymbol property)
@@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers
                 throw new ArgumentNullException(nameof(property));
             }
 
-            var attribute = property.GetAttributes().FirstOrDefault(a => a.AttributeClass == symbols.ParameterAttribute);
+            var attribute = property.GetAttributes().FirstOrDefault(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.ParameterAttribute));
             if (attribute == null)
             {
                 return false;
@@ -84,7 +84,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers
                 throw new ArgumentNullException(nameof(property));
             }
 
-            return property.GetAttributes().Any(a => a.AttributeClass == symbols.CascadingParameterAttribute);
+            return property.GetAttributes().Any(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.CascadingParameterAttribute));
         }
 
         public static bool IsComponent(ComponentSymbols symbols, Compilation compilation, INamedTypeSymbol type)

+ 1 - 0
src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs

@@ -30,6 +30,7 @@ namespace Microsoft.Extensions.Internal
 
         public override void Initialize(AnalysisContext context)
         {
+            context.EnableConcurrentExecution();
             context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
 
             _inner.Register(context);

+ 2 - 0
src/Components/Analyzers/src/ComponentParameterAnalyzer.cs

@@ -29,6 +29,8 @@ namespace Microsoft.AspNetCore.Components.Analyzers
 
         public override void Initialize(AnalysisContext context)
         {
+            context.EnableConcurrentExecution();
+            context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
             context.RegisterCompilationStartAction(context =>
             {
                 if (!ComponentSymbols.TryCreate(context.Compilation, out var symbols))

+ 1 - 0
src/Components/Analyzers/src/ComponentParameterUsageAnalyzer.cs

@@ -25,6 +25,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers
 
         public override void Initialize(AnalysisContext context)
         {
+            context.EnableConcurrentExecution();
             context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
             context.RegisterCompilationStartAction(context =>
             {

+ 2 - 2
src/Components/Analyzers/src/InternalUsageAnalyzer.cs

@@ -126,7 +126,7 @@ namespace Microsoft.Extensions.Internal
         // Similar logic here to VisitDeclarationSymbol, keep these in sync.
         private void VisitOperationSymbol(OperationAnalysisContext context, ISymbol symbol)
         {
-            if (symbol == null || symbol.ContainingAssembly == context.Compilation.Assembly)
+            if (symbol == null || SymbolEqualityComparer.Default.Equals(symbol.ContainingAssembly, context.Compilation.Assembly))
             {
                 // The type is being referenced within the same assembly. This is valid use of an "internal" type
                 return;
@@ -155,7 +155,7 @@ namespace Microsoft.Extensions.Internal
         // Similar logic here to VisitOperationSymbol, keep these in sync.
         private void VisitDeclarationSymbol(SymbolAnalysisContext context, ISymbol symbol, ISymbol symbolForDiagnostic)
         {
-            if (symbol == null || symbol.ContainingAssembly == context.Compilation.Assembly)
+            if (symbol == null || SymbolEqualityComparer.Default.Equals(symbol.ContainingAssembly, context.Compilation.Assembly))
             {
                 // This is part of the compilation, avoid this analyzer when building from source.
                 return;

+ 3 - 3
src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs

@@ -97,7 +97,7 @@ namespace Microsoft.CodeAnalysis
             source = source ?? throw new ArgumentNullException(nameof(source));
             target = target ?? throw new ArgumentNullException(nameof(target));
 
-            if (source == target)
+            if (SymbolEqualityComparer.Default.Equals(source, target))
             {
                 return true;
             }
@@ -106,7 +106,7 @@ namespace Microsoft.CodeAnalysis
             {
                 foreach (var @interface in target.AllInterfaces)
                 {
-                    if (source == @interface)
+                    if (SymbolEqualityComparer.Default.Equals(source, @interface))
                     {
                         return true;
                     }
@@ -117,7 +117,7 @@ namespace Microsoft.CodeAnalysis
 
             foreach (var type in target.GetTypeHierarchy())
             {
-                if (source == type)
+                if (SymbolEqualityComparer.Default.Equals(source, type))
                 {
                     return true;
                 }

+ 1 - 1
src/Mvc/Mvc.Analyzers/src/MvcFacts.cs

@@ -141,7 +141,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
             }
 
             var implementedMethod = method.ContainingType.FindImplementationForInterfaceMember(disposableDispose);
-            return implementedMethod == method;
+            return SymbolEqualityComparer.Default.Equals(implementedMethod, method);
         }
     }
 }

+ 2 - 1
src/Mvc/Mvc.Analyzers/src/TagHelpersInCodeBlocksAnalyzer.cs

@@ -24,6 +24,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
 
         public override void Initialize(AnalysisContext context)
         {
+            context.EnableConcurrentExecution();
             // Generated Razor code is considered auto generated. By default analyzers skip over auto-generated code unless we say otherwise.
             context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
             context.RegisterCompilationStartAction(context =>
@@ -105,7 +106,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
 
         private bool IsTagHelperRunnerRunAsync(IMethodSymbol method, SymbolCache symbolCache)
         {
-            if (method != symbolCache.TagHelperRunnerRunAsyncMethodSymbol)
+            if (!SymbolEqualityComparer.Default.Equals(method, symbolCache.TagHelperRunnerRunAsyncMethodSymbol))
             {
                 return false;
             }

+ 1 - 1
src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs

@@ -152,7 +152,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
             foreach (var attribute in symbol.GetAttributes(symbolCache.IModelNameProvider))
             {
                 // BindAttribute uses the Prefix property as an alias for IModelNameProvider.Name
-                var nameProperty = attribute.AttributeClass == symbolCache.BindAttribute ? "Prefix" : "Name";
+                var nameProperty = SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, symbolCache.BindAttribute) ? "Prefix" : "Name";
 
                 // All of the built-in attributes (FromQueryAttribute, ModelBinderAttribute etc) only support setting the name via
                 // a property. We'll ignore constructor values.

+ 2 - 0
src/Mvc/Mvc.Analyzers/src/ViewFeatureAnalyzerBase.cs

@@ -21,6 +21,8 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
 
         public sealed override void Initialize(AnalysisContext context)
         {
+            context.EnableConcurrentExecution();
+            context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
             context.RegisterCompilationStartAction(compilationContext =>
             {
                 var analyzerContext = new ViewFeaturesAnalyzerContext(compilationContext);

+ 1 - 1
src/Mvc/Mvc.Analyzers/src/ViewFeaturesAnalyzerContext.cs

@@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
                 return false;
             }
 
-            if (method.ContainingType != HtmlHelperPartialExtensionsType)
+            if (!SymbolEqualityComparer.Default.Equals(method.ContainingType, HtmlHelperPartialExtensionsType))
             {
                 return false;
             }

+ 2 - 2
src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs

@@ -281,14 +281,14 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
 
             for (var i = 0; i < property.ExplicitInterfaceImplementations.Length; i++)
             {
-                if (property.ExplicitInterfaceImplementations[i] == statusCodeActionResultStatusProperty)
+                if (SymbolEqualityComparer.Default.Equals(property.ExplicitInterfaceImplementations[i], statusCodeActionResultStatusProperty))
                 {
                     return true;
                 }
             }
 
             var implementedProperty = property.ContainingType.FindImplementationForInterfaceMember(statusCodeActionResultStatusProperty);
-            return implementedProperty == property;
+            return SymbolEqualityComparer.Default.Equals(implementedProperty, property);
         }
 
         private static bool HasAttributeNamed(ISymbol symbol, string attributeName)

+ 3 - 3
src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs

@@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
                 AttributeSyntax attributeSyntax;
                 bool addUsing;
 
-                if (statusCode >= 400 && returnType != null && returnType != errorResponseType)
+                if (statusCode >= 400 && returnType != null && !SymbolEqualityComparer.Default.Equals(returnType, errorResponseType))
                 {
                     // If a returnType was discovered and is different from the errorResponseType, use it in the result.
                     attributeSyntax = CreateProducesResponseTypeAttribute(context, statusCode, returnType, out addUsing);
@@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
                 addUsingDirective |= addUsing;
             }
 
-            if (!declaredResponseMetadata.Any(m => m.IsDefault && m.AttributeSource == context.Method))
+            if (!declaredResponseMetadata.Any(m => m.IsDefault && SymbolEqualityComparer.Default.Equals(m.AttributeSource, context.Method)))
             {
                 // Add a ProducesDefaultResponseTypeAttribute if the method does not already have one.
                 documentEditor.AddAttribute(context.MethodSyntax, CreateProducesDefaultResponseTypeAttribute());
@@ -200,7 +200,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
             foreach (var metadata in actualResponseMetadata)
             {
                 if (DeclaredApiResponseMetadata.TryGetDeclaredMetadata(declaredResponseMetadata, metadata, result: out var declaredMetadata) &&
-                    declaredMetadata.AttributeSource == context.Method)
+                    SymbolEqualityComparer.Default.Equals(declaredMetadata.AttributeSource, context.Method))
                 {
                     // A ProducesResponseType attribute is declared on the method for the current status code.
                     continue;

+ 1 - 1
src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs

@@ -199,7 +199,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
                 return false;
             }
 
-            if (propertyReference.Member.ContainingType != symbolCache.ModelStateDictionary)
+            if (!SymbolEqualityComparer.Default.Equals(propertyReference.Member.ContainingType, symbolCache.ModelStateDictionary))
             {
                 return false;
             }