提交 3faa3e32 编写于 作者: S Shyam N

Add simplifier annotation on using directives generated via the Add Using fix...

Add simplifier annotation on using directives generated via the Add Using fix so that generated directives are already simplified (in the case where using is generated inside a namespace declaration) without the user having to simplify manually in a subsequent step.

Note: I also added the annotation inthe corresponding VB fix for parity. However, this should be a no-op for VB since VB only supports file-level namespace imports.

Fixes #1893
上级 adb3ebef
......@@ -1927,6 +1927,49 @@ public void TestAddUsingForField()
@"using System ; using System . Collections . Generic ; using System . Linq ; using System . Threading . Tasks ; using A ; class Program { public B B { get { return B . Instance ; } } } namespace A { public class B { public static readonly B Instance ; } } ");
}
[WorkItem(1893, "https://github.com/dotnet/roslyn/issues/1893")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsAddUsing)]
public void TestNameSimplification()
{
// Generated using directive must be simplified from "using A.B;" to "using B;" below.
Test(
@"
namespace A.B
{
class T1 { }
}
namespace A.C
{
using System;
class T2
{
void Test()
{
Console.WriteLine();
[|T1|] t1;
}
}
}",
@"
namespace A.B
{
class T1 { }
}
namespace A.C
{
using System;
using B;
class T2
{
void Test()
{
Console.WriteLine();
T1 t1;
}
}
}");
}
public partial class AddUsingTestsWithAddImportDiagnosticProvider : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest
{
internal override Tuple<DiagnosticAnalyzer, CodeFixProvider> CreateDiagnosticProviderAndFixer(Workspace workspace)
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Composition;
......@@ -10,12 +9,10 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CodeFixes.AddImport;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Utilities;
using Microsoft.CodeAnalysis.FindSymbols;
using Microsoft.CodeAnalysis.Formatting;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.Shared.Extensions;
......@@ -491,7 +488,7 @@ private UsingDirectiveSyntax GetUsingDirective(CompilationUnitSyntax root, IName
{
if (TryGetNamespaceString(namespaceSymbol, root, false, externAliasString, out namespaceString))
{
return SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(namespaceString));
return SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(namespaceString).WithAdditionalAnnotations(Simplifier.Annotation));
}
return null;
......@@ -499,7 +496,7 @@ private UsingDirectiveSyntax GetUsingDirective(CompilationUnitSyntax root, IName
if (TryGetNamespaceString(namespaceSymbol, root, fullyQualify, null, out namespaceString))
{
return SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(namespaceString));
return SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(namespaceString).WithAdditionalAnnotations(Simplifier.Annotation));
}
}
......@@ -509,10 +506,10 @@ private UsingDirectiveSyntax GetUsingDirective(CompilationUnitSyntax root, IName
if (TryGetStaticNamespaceString(namespaceSymbol, root, fullyQualify, null, out staticNamespaceString))
{
return SyntaxFactory.UsingDirective(
SyntaxFactory.Token(SyntaxKind.UsingKeyword),
SyntaxFactory.Token(SyntaxKind.StaticKeyword),
null,
SyntaxFactory.ParseName(staticNamespaceString),
SyntaxFactory.Token(SyntaxKind.UsingKeyword),
SyntaxFactory.Token(SyntaxKind.StaticKeyword),
null,
SyntaxFactory.ParseName(staticNamespaceString).WithAdditionalAnnotations(Simplifier.Annotation),
SyntaxFactory.Token(SyntaxKind.SemicolonToken));
}
}
......
......@@ -8,6 +8,7 @@ Imports Microsoft.CodeAnalysis.CodeFixes
Imports Microsoft.CodeAnalysis.CodeFixes.AddImport
Imports Microsoft.CodeAnalysis.Formatting
Imports Microsoft.CodeAnalysis.LanguageServices
Imports Microsoft.CodeAnalysis.Simplification
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic.CodeFixes.AddImport
......@@ -282,7 +283,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeFixes.AddImport
placeSystemNamespaceFirst As Boolean,
cancellationToken As CancellationToken) As Task(Of Document)
Dim memberImportsClause =
SyntaxFactory.SimpleImportsClause(name:=DirectCast(symbol.GenerateTypeSyntax(addGlobal:=False), NameSyntax))
SyntaxFactory.SimpleImportsClause(name:=DirectCast(symbol.GenerateTypeSyntax(addGlobal:=False), NameSyntax).WithAdditionalAnnotations(Simplifier.Annotation))
Dim newImport = SyntaxFactory.ImportsStatement(
importsClauses:=SyntaxFactory.SingletonSeparatedList(Of ImportsClauseSyntax)(memberImportsClause))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册