public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
{
var updatedIdentifierName = (IdentifierNameSyntax)base.VisitIdentifierName(node);
// Get TypeSymbol corresponding to the IdentifierNameSyntax and check whether
// it is the same as the TypeSymbol we are searching for.
Symbol identifierSymbol = SemanticModel.GetSymbolInfo(node).Symbol;
// Handle |C| x = new C().
var isMatchingTypeName = identifierSymbol.Equals(SearchSymbol);
// Handle C x = new |C|().
var isMatchingConstructor =
identifierSymbol is MethodSymbol &&
((MethodSymbol)identifierSymbol).MethodKind == MethodKind.Constructor &&
identifierSymbol.ContainingSymbol.Equals(SearchSymbol);
if (isMatchingTypeName || isMatchingConstructor)
{
// Replace the identifier token containing the name of the class.
SyntaxToken updatedIdentifierToken =
Syntax.Identifier(
updatedIdentifierName.Identifier.LeadingTrivia,
NewName,
updatedIdentifierName.Identifier.TrailingTrivia);
updatedIdentifierName = updatedIdentifierName.WithIdentifier(updatedIdentifierToken);
}
return updatedIdentifierName;
}