From 60cb3bb5c47eb681bfc66b2c0c53122ce3d864ee Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Thu, 13 Aug 2020 23:49:47 +0200 Subject: [PATCH] Fix warnings in analyzer packages (#24837) --- Directory.Build.props | 3 --- src/Components/Analyzers/src/ComponentFacts.cs | 8 ++++---- .../src/ComponentInternalUsageDiagnosticAnalzyer.cs | 1 + .../Analyzers/src/ComponentParameterAnalyzer.cs | 2 ++ .../Analyzers/src/ComponentParameterUsageAnalyzer.cs | 1 + src/Components/Analyzers/src/InternalUsageAnalyzer.cs | 4 ++-- src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs | 6 +++--- src/Mvc/Mvc.Analyzers/src/MvcFacts.cs | 2 +- .../Mvc.Analyzers/src/TagHelpersInCodeBlocksAnalyzer.cs | 3 ++- .../Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs | 2 +- src/Mvc/Mvc.Analyzers/src/ViewFeatureAnalyzerBase.cs | 2 ++ src/Mvc/Mvc.Analyzers/src/ViewFeaturesAnalyzerContext.cs | 2 +- .../src/ActualApiResponseMetadataFactory.cs | 4 ++-- .../src/AddResponseTypeAttributeCodeFixAction.cs | 6 +++--- ...onsDoNotRequireExplicitModelValidationCheckAnalyzer.cs | 2 +- 15 files changed, 26 insertions(+), 22 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index bc09f78c3a..520064f60c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -100,9 +100,6 @@ $(WarningsNotAsErrors);xUnit1004 - - - $(NoWarn);RS1024;RS1025;RS1026 diff --git a/src/Components/Analyzers/src/ComponentFacts.cs b/src/Components/Analyzers/src/ComponentFacts.cs index 75403ce282..a8b24b37be 100644 --- a/src/Components/Analyzers/src/ComponentFacts.cs +++ b/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) diff --git a/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs b/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs index b1b5724cb3..f1a598a9c5 100644 --- a/src/Components/Analyzers/src/ComponentInternalUsageDiagnosticAnalzyer.cs +++ b/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); diff --git a/src/Components/Analyzers/src/ComponentParameterAnalyzer.cs b/src/Components/Analyzers/src/ComponentParameterAnalyzer.cs index c6d8670dcb..43ad2b77d1 100644 --- a/src/Components/Analyzers/src/ComponentParameterAnalyzer.cs +++ b/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)) diff --git a/src/Components/Analyzers/src/ComponentParameterUsageAnalyzer.cs b/src/Components/Analyzers/src/ComponentParameterUsageAnalyzer.cs index 8df3167b83..527ea0372b 100644 --- a/src/Components/Analyzers/src/ComponentParameterUsageAnalyzer.cs +++ b/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 => { diff --git a/src/Components/Analyzers/src/InternalUsageAnalyzer.cs b/src/Components/Analyzers/src/InternalUsageAnalyzer.cs index af77a42ecc..d9ac0a155d 100644 --- a/src/Components/Analyzers/src/InternalUsageAnalyzer.cs +++ b/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; diff --git a/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs b/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs index 2da40500b8..186083aca1 100644 --- a/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs +++ b/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; } diff --git a/src/Mvc/Mvc.Analyzers/src/MvcFacts.cs b/src/Mvc/Mvc.Analyzers/src/MvcFacts.cs index 7991bb6ff9..e97439897f 100644 --- a/src/Mvc/Mvc.Analyzers/src/MvcFacts.cs +++ b/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); } } } diff --git a/src/Mvc/Mvc.Analyzers/src/TagHelpersInCodeBlocksAnalyzer.cs b/src/Mvc/Mvc.Analyzers/src/TagHelpersInCodeBlocksAnalyzer.cs index 9cf680f2e4..e14350ec1b 100644 --- a/src/Mvc/Mvc.Analyzers/src/TagHelpersInCodeBlocksAnalyzer.cs +++ b/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; } diff --git a/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs b/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs index 2d391f55c8..9de0b3dd17 100644 --- a/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs +++ b/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. diff --git a/src/Mvc/Mvc.Analyzers/src/ViewFeatureAnalyzerBase.cs b/src/Mvc/Mvc.Analyzers/src/ViewFeatureAnalyzerBase.cs index bade87c8a4..45df7c7ffb 100644 --- a/src/Mvc/Mvc.Analyzers/src/ViewFeatureAnalyzerBase.cs +++ b/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); diff --git a/src/Mvc/Mvc.Analyzers/src/ViewFeaturesAnalyzerContext.cs b/src/Mvc/Mvc.Analyzers/src/ViewFeaturesAnalyzerContext.cs index 6fe12d0b3d..221d077c63 100644 --- a/src/Mvc/Mvc.Analyzers/src/ViewFeaturesAnalyzerContext.cs +++ b/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; } diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs b/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs index 7ae878a51e..58d75a9944 100644 --- a/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs +++ b/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) diff --git a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs index d285e892cd..3ef2919686 100644 --- a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs +++ b/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; diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs b/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs index d884ed3504..b1f52a8c78 100644 --- a/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs +++ b/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; }