Skip to content

Commit

Permalink
Added SyntaxGenerator.AliasImportDeclaration overload that takes a Sy…
Browse files Browse the repository at this point in the history
…ntaxNode for the name to create an alias for.
  • Loading branch information
MaStr11 committed Mar 1, 2018
1 parent 5577f1a commit a470e46
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,8 @@ public override SyntaxNode NamespaceImportDeclaration(SyntaxNode name)
return SyntaxFactory.UsingDirective((NameSyntax)name);
}

public override SyntaxNode AliasImportDeclaration(string aliasIdentifierName, INamespaceOrTypeSymbol symbol)
{
var nameSyntax = symbol.GenerateNameSyntax();
return SyntaxFactory.UsingDirective(SyntaxFactory.NameEquals(aliasIdentifierName), nameSyntax);
}
public override SyntaxNode AliasImportDeclaration(string aliasIdentifierName, SyntaxNode name)
=> SyntaxFactory.UsingDirective(SyntaxFactory.NameEquals(aliasIdentifierName), (NameSyntax)name);

public override SyntaxNode NamespaceDeclaration(SyntaxNode name, IEnumerable<SyntaxNode> declarations)
{
Expand Down Expand Up @@ -3968,6 +3965,9 @@ public override SyntaxNode QualifiedName(SyntaxNode left, SyntaxNode right)
return SyntaxFactory.QualifiedName((NameSyntax)left, (SimpleNameSyntax)right).WithAdditionalAnnotations(Simplifier.Annotation);
}

public override SyntaxNode NameExpression(INamespaceOrTypeSymbol namespaceOrTypeSymbol)
=> namespaceOrTypeSymbol.GenerateNameSyntax();

public override SyntaxNode TypeExpression(ITypeSymbol typeSymbol)
{
return typeSymbol.GenerateTypeSyntax();
Expand Down
19 changes: 17 additions & 2 deletions src/Workspaces/Core/Portable/Editing/SyntaxGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -788,11 +788,19 @@ public SyntaxNode NamespaceImportDeclaration(string name)
}

/// <summary>
/// Creates a alias import declaration.
/// Creates an alias import declaration.
/// </summary>
/// <param name="aliasIdentifierName">The name of the alias.</param>
/// <param name="symbol">The namespace or type to be aliased.</param>
public abstract SyntaxNode AliasImportDeclaration(string aliasIdentifierName, INamespaceOrTypeSymbol symbol);
public SyntaxNode AliasImportDeclaration(string aliasIdentifierName, INamespaceOrTypeSymbol symbol)
=> AliasImportDeclaration(aliasIdentifierName, NameExpression(symbol));

/// <summary>
/// Creates an alias import declaration.
/// </summary>
/// <param name="aliasIdentifierName">The name of the alias.</param>
/// <param name="name">The namespace or type to be aliased.</param>
public abstract SyntaxNode AliasImportDeclaration(string aliasIdentifierName, SyntaxNode name);

/// <summary>
/// Creates an attribute.
Expand Down Expand Up @@ -1696,6 +1704,13 @@ public SyntaxNode DottedName(string dottedName)

private static readonly char[] s_dotSeparator = new char[] { '.' };

/// <summary>
/// Creates a name that denotes a type or namespace.
/// </summary>
/// <param name="namespaceOrTypeSymbol">The symbol to create a name for.</param>
/// <returns></returns>
public abstract SyntaxNode NameExpression(INamespaceOrTypeSymbol namespaceOrTypeSymbol);

/// <summary>
/// Creates an expression that denotes a type.
/// </summary>
Expand Down
4 changes: 3 additions & 1 deletion src/Workspaces/Core/Portable/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
Microsoft.CodeAnalysis.Editing.DeclarationModifiers.IsRef.get -> bool
Microsoft.CodeAnalysis.Editing.SyntaxGenerator.AliasImportDeclaration(string aliasIdentifierName, Microsoft.CodeAnalysis.INamespaceOrTypeSymbol symbol) -> Microsoft.CodeAnalysis.SyntaxNode
Microsoft.CodeAnalysis.Editing.SyntaxGenerator.TupleElementExpression(Microsoft.CodeAnalysis.ITypeSymbol type, string name = null) -> Microsoft.CodeAnalysis.SyntaxNode
Microsoft.CodeAnalysis.Editing.SyntaxGenerator.TupleTypeExpression(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.ITypeSymbol> elementTypes, System.Collections.Generic.IEnumerable<string> elementNames = null) -> Microsoft.CodeAnalysis.SyntaxNode
Microsoft.CodeAnalysis.Editing.SyntaxGenerator.TupleTypeExpression(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.SyntaxNode> elements) -> Microsoft.CodeAnalysis.SyntaxNode
Microsoft.CodeAnalysis.Editing.SyntaxGenerator.TupleTypeExpression(params Microsoft.CodeAnalysis.SyntaxNode[] elements) -> Microsoft.CodeAnalysis.SyntaxNode
Microsoft.CodeAnalysis.Editing.SyntaxGenerator.WithAccessorDeclarations(Microsoft.CodeAnalysis.SyntaxNode declaration, params Microsoft.CodeAnalysis.SyntaxNode[] accessorDeclarations) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.AliasImportDeclaration(string aliasIdentifierName, Microsoft.CodeAnalysis.INamespaceOrTypeSymbol symbol) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.AliasImportDeclaration(string aliasIdentifierName, Microsoft.CodeAnalysis.SyntaxNode name) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.GetAccessorDeclaration(Microsoft.CodeAnalysis.Accessibility accessibility = Microsoft.CodeAnalysis.Accessibility.NotApplicable, System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.SyntaxNode> statements = null) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.NameExpression(Microsoft.CodeAnalysis.INamespaceOrTypeSymbol namespaceOrTypeSymbol) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.SetAccessorDeclaration(Microsoft.CodeAnalysis.Accessibility accessibility = Microsoft.CodeAnalysis.Accessibility.NotApplicable, System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.SyntaxNode> statements = null) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.TupleElementExpression(Microsoft.CodeAnalysis.SyntaxNode type, string name = null) -> Microsoft.CodeAnalysis.SyntaxNode
abstract Microsoft.CodeAnalysis.Editing.SyntaxGenerator.TupleExpression(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.SyntaxNode> arguments) -> Microsoft.CodeAnalysis.SyntaxNode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeGeneration
Throw New NotSupportedException("ThrowExpressions are not supported in Visual Basic")
End Function

Public Overrides Function NameExpression(namespaceOrTypeSymbol As INamespaceOrTypeSymbol) As SyntaxNode
Return namespaceOrTypeSymbol.GenerateTypeSyntax()
End Function

Public Overrides Function TypeExpression(typeSymbol As ITypeSymbol) As SyntaxNode
Return typeSymbol.GenerateTypeSyntax()
End Function
Expand Down Expand Up @@ -1500,16 +1504,15 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeGeneration
Return SyntaxFactory.ImportsStatement(SyntaxFactory.SingletonSeparatedList(Of ImportsClauseSyntax)(SyntaxFactory.SimpleImportsClause(DirectCast(name, NameSyntax))))
End Function

Public Overrides Function AliasImportDeclaration(aliasIdentifierName As String, symbol As INamespaceOrTypeSymbol) As SyntaxNode
Dim typeSyntax = symbol.GenerateTypeSyntax()
If TypeOf typeSyntax Is NameSyntax Then
Public Overrides Function AliasImportDeclaration(aliasIdentifierName As String, name As SyntaxNode) As SyntaxNode
If TypeOf name Is NameSyntax Then
Return SyntaxFactory.ImportsStatement(SyntaxFactory.SeparatedList(Of ImportsClauseSyntax).Add(
SyntaxFactory.SimpleImportsClause(
SyntaxFactory.ImportAliasClause(aliasIdentifierName),
CType(typeSyntax, NameSyntax))))
CType(name, NameSyntax))))

End If
Throw New ArgumentException("Symbol can not be named.", NameOf(symbol))
Throw New ArgumentException("name is not a NameSyntax.", NameOf(name))
End Function

Public Overrides Function NamespaceDeclaration(name As SyntaxNode, nestedDeclarations As IEnumerable(Of SyntaxNode)) As SyntaxNode
Expand Down

0 comments on commit a470e46

Please sign in to comment.