本文整理汇总了C#中UsingDirectiveSyntax.ReplaceNode方法的典型用法代码示例。如果您正苦于以下问题:C# UsingDirectiveSyntax.ReplaceNode方法的具体用法?C# UsingDirectiveSyntax.ReplaceNode怎么用?C# UsingDirectiveSyntax.ReplaceNode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UsingDirectiveSyntax
的用法示例。
在下文中一共展示了UsingDirectiveSyntax.ReplaceNode方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: QualifyUsingDirective
private UsingDirectiveSyntax QualifyUsingDirective(UsingDirectiveSyntax usingDirective)
{
NameSyntax originalName = usingDirective.Name;
NameSyntax rewrittenName;
switch (originalName.Kind())
{
case SyntaxKind.QualifiedName:
case SyntaxKind.IdentifierName:
case SyntaxKind.GenericName:
if (originalName.Parent.IsKind(SyntaxKind.UsingDirective)
|| originalName.Parent.IsKind(SyntaxKind.TypeArgumentList))
{
var symbol = this.semanticModel.GetSymbolInfo(originalName, cancellationToken: CancellationToken.None).Symbol;
if (symbol == null)
{
rewrittenName = originalName;
break;
}
if (symbol is INamespaceSymbol)
{
// TODO: Preserve inner trivia
string fullName = symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
NameSyntax replacement = SyntaxFactory.ParseName(fullName);
if (!originalName.DescendantNodesAndSelf().OfType<AliasQualifiedNameSyntax>().Any())
{
replacement = replacement.ReplaceNodes(
replacement.DescendantNodesAndSelf().OfType<AliasQualifiedNameSyntax>(),
(originalNode2, rewrittenNode2) => rewrittenNode2.Name);
}
rewrittenName = replacement.WithTriviaFrom(originalName);
break;
}
else if (symbol is INamedTypeSymbol)
{
// TODO: Preserve inner trivia
// TODO: simplify after qualification
string fullName;
if (SpecialTypeHelper.IsPredefinedType(((INamedTypeSymbol)symbol).OriginalDefinition.SpecialType))
{
fullName = "global::System." + symbol.Name;
}
else
{
fullName = symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
}
NameSyntax replacement = SyntaxFactory.ParseName(fullName);
if (!originalName.DescendantNodesAndSelf().OfType<AliasQualifiedNameSyntax>().Any())
{
replacement = replacement.ReplaceNodes(
replacement.DescendantNodesAndSelf().OfType<AliasQualifiedNameSyntax>(),
(originalNode2, rewrittenNode2) => rewrittenNode2.Name);
}
rewrittenName = replacement.WithTriviaFrom(originalName);
break;
}
else
{
rewrittenName = originalName;
break;
}
}
else
{
rewrittenName = originalName;
break;
}
case SyntaxKind.AliasQualifiedName:
case SyntaxKind.PredefinedType:
default:
rewrittenName = originalName;
break;
}
if (rewrittenName == originalName)
{
return usingDirective;
}
return usingDirective.ReplaceNode(originalName, rewrittenName);
}