| File: SimplifyTypeNames\SimplifyTypeNamesCodeFixProvider.cs | Web Access |
| Project: src\roslyn\src\Features\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Features.csproj (Microsoft.CodeAnalysis.CSharp.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System.Composition; using System.Diagnostics.CodeAnalysis; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.CSharp.Diagnostics.SimplifyTypeNames; using Microsoft.CodeAnalysis.CSharp.Simplification; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Simplification; using Microsoft.CodeAnalysis.SimplifyTypeNames; namespace Microsoft.CodeAnalysis.CSharp.SimplifyTypeNames; [ExportCodeFixProvider(LanguageNames.CSharp, Name = PredefinedCodeFixProviderNames.SimplifyNames), Shared] [ExtensionOrder(After = PredefinedCodeFixProviderNames.RemoveUnnecessaryCast)] [method: ImportingConstructor] [method: SuppressMessage("RoslynDiagnosticsReliability", "RS0033:Importing constructor should be [Obsolete]", Justification = "Used in test code: https://github.com/dotnet/roslyn/issues/42814")] internal sealed partial class SimplifyTypeNamesCodeFixProvider() : AbstractSimplifyTypeNamesCodeFixProvider<SyntaxKind, CSharpSimplifierOptions>(new CSharpSimplifyTypeNamesDiagnosticAnalyzer()) { protected override string GetTitle(string diagnosticId, string nodeText) { switch (diagnosticId) { case IDEDiagnosticIds.SimplifyNamesDiagnosticId: case IDEDiagnosticIds.PreferBuiltInOrFrameworkTypeDiagnosticId: return string.Format(FeaturesResources.Simplify_name_0, nodeText); case IDEDiagnosticIds.SimplifyMemberAccessDiagnosticId: return string.Format(FeaturesResources.Simplify_member_access_0, nodeText); default: throw ExceptionUtilities.UnexpectedValue(diagnosticId); } } protected override SyntaxNode AddSimplificationAnnotationTo(SyntaxNode expressionSyntax) { // Add the DoNotAllowVarAnnotation annotation. All the code fixer // does is pass the tagged node to the simplifier. And we do *not* // ever want the simplifier to produce 'var' in the 'Simplify type // names' fixer. only the 'Use var' fixer should produce 'var'. var annotatedexpressionSyntax = expressionSyntax.WithAdditionalAnnotations( Simplifier.Annotation, Formatter.Annotation, DoNotAllowVarAnnotation.Annotation); if (annotatedexpressionSyntax.Kind() is SyntaxKind.IsExpression or SyntaxKind.AsExpression) { var right = ((BinaryExpressionSyntax)annotatedexpressionSyntax).Right; annotatedexpressionSyntax = annotatedexpressionSyntax.ReplaceNode(right, right.WithAdditionalAnnotations(Simplifier.Annotation)); } return annotatedexpressionSyntax; } }