public override SyntaxNode VisitInvocationExpression(InvocationExpressionSyntax node) { var method = this.semanticModel.GetSymbolInfo(node).Symbol as IMethodSymbol; node = (InvocationExpressionSyntax)base.VisitInvocationExpression(node); if (node.Expression is IdentifierNameSyntax && ((IdentifierNameSyntax)node.Expression).Identifier.Text == "nameof") { string name = SyntaxHelper.GetSymbolName(node, semanticModel); return(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(name))); } else { if (method != null && method.IsGenericMethod && !method.TypeArguments.Any(SyntaxHelper.IsAnonymous)) { var expr = node.Expression; var ma = expr as MemberAccessExpressionSyntax; if (expr is IdentifierNameSyntax) { var name = (IdentifierNameSyntax)expr; var genericName = SyntaxHelper.GenerateGenericName(name.Identifier, method.TypeArguments); genericName = genericName.WithLeadingTrivia(name.GetLeadingTrivia()).WithTrailingTrivia(name.GetTrailingTrivia()); node = node.WithExpression(genericName); } else if (ma != null && ma.Name is IdentifierNameSyntax) { expr = ma.Name; var name = (IdentifierNameSyntax)expr; var genericName = SyntaxHelper.GenerateGenericName(name.Identifier, method.TypeArguments); genericName = genericName.WithLeadingTrivia(name.GetLeadingTrivia()).WithTrailingTrivia(name.GetTrailingTrivia()); if (method.MethodKind == MethodKind.ReducedExtension && node.GetParent <ConditionalAccessExpressionSyntax>() == null) { var target = ma.Expression; var clsName = "global::" + method.ContainingType.FullyQualifiedName(); ma = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.IdentifierName(clsName), genericName); node = node.WithArgumentList(node.ArgumentList.WithArguments(node.ArgumentList.Arguments.Insert(0, SyntaxFactory.Argument(target)))); } else { ma = ma.WithName(genericName); } node = node.WithExpression(ma); } } } return(node); }
public override SyntaxNode VisitInvocationExpression(InvocationExpressionSyntax node) { var method = this.semanticModel.GetSymbolInfo(node).Symbol as IMethodSymbol; node = (InvocationExpressionSyntax)base.VisitInvocationExpression(node); if (node.Expression is IdentifierNameSyntax && ((IdentifierNameSyntax)node.Expression).Identifier.Text == "nameof") { string name = SyntaxHelper.GetSymbolName(node, semanticModel); return(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(name))); } else { if (method != null && method.IsGenericMethod && !method.TypeArguments.Any(SyntaxHelper.IsAnonymous)) { var expr = node.Expression; var ma = expr as MemberAccessExpressionSyntax; if (expr is IdentifierNameSyntax) { var name = (IdentifierNameSyntax)expr; var genericName = SyntaxHelper.GenerateGenericName(name.Identifier, method.TypeArguments); genericName = genericName.WithLeadingTrivia(name.GetLeadingTrivia()).WithTrailingTrivia(name.GetTrailingTrivia()); node = node.WithExpression(genericName); } else if (ma != null && ma.Name is IdentifierNameSyntax) { expr = ma.Name; var name = (IdentifierNameSyntax)expr; var genericName = SyntaxHelper.GenerateGenericName(name.Identifier, method.TypeArguments); genericName = genericName.WithLeadingTrivia(name.GetLeadingTrivia()).WithTrailingTrivia(name.GetTrailingTrivia()); ma = ma.WithName(genericName); node = node.WithExpression(ma); } } } return(node); }