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 VisitIdentifierName(IdentifierNameSyntax node) { var symbol = semanticModel.GetSymbolInfo(node).Symbol; node = (IdentifierNameSyntax)base.VisitIdentifierName(node); if (symbol != null && symbol.IsStatic && symbol.ContainingType != null && (symbol is IMethodSymbol || symbol is IPropertySymbol || symbol is IFieldSymbol || symbol is IEventSymbol) && !(node.Parent is MemberAccessExpressionSyntax)) { if (symbol is IMethodSymbol && ((IMethodSymbol)symbol).IsGenericMethod) { var genericName = SyntaxHelper.GenerateGenericName(node.Identifier, ((IMethodSymbol)symbol).TypeArguments); return(genericName.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia())); } return(SyntaxFactory.IdentifierName(SyntaxFactory.Identifier(node.GetLeadingTrivia(), symbol.FullyQualifiedName(), node.GetTrailingTrivia()))); } 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); }
public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { var symbol = semanticModel.GetSymbolInfo(node).Symbol; var parent = node.Parent; while (parent != null && !(parent is TypeDeclarationSyntax)) { parent = parent.Parent; } ITypeSymbol thisType = null; if (parent is TypeDeclarationSyntax) { thisType = this.semanticModel.GetDeclaredSymbol(parent) as ITypeSymbol; } bool needHandle = !node.IsVar && symbol is ITypeSymbol && symbol.ContainingType != null && thisType != null && !thisType.InheritsFromOrEquals(symbol.ContainingType) && !thisType.Equals(symbol); var qns = node.Parent as QualifiedNameSyntax; if (qns != null && needHandle) { SyntaxNode n = node; do { if (!qns.Left.Equals(n)) { needHandle = false; } n = qns; qns = qns.Parent as QualifiedNameSyntax; } while (qns != null && needHandle); } node = (IdentifierNameSyntax)base.VisitIdentifierName(node); if (needHandle && !(node.Parent is MemberAccessExpressionSyntax)) { INamedTypeSymbol namedType = symbol as INamedTypeSymbol; if (namedType != null && namedType.IsGenericType && namedType.TypeArguments.Length > 0 && !namedType.TypeArguments.Any(SyntaxHelper.IsAnonymous)) { var genericName = SyntaxHelper.GenerateGenericName(node.Identifier, namedType.TypeArguments); return(genericName.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia())); } return(SyntaxFactory.IdentifierName(SyntaxFactory.Identifier(node.GetLeadingTrivia(), symbol.FullyQualifiedName(), node.GetTrailingTrivia()))); } IMethodSymbol methodSymbol = null; if (symbol != null && symbol.IsStatic && symbol.ContainingType != null && thisType != null && !thisType.InheritsFromOrEquals(symbol.ContainingType) && !(node.Parent is MemberAccessExpressionSyntax) && ( (methodSymbol = symbol as IMethodSymbol) != null || symbol is IPropertySymbol || symbol is IFieldSymbol || symbol is IEventSymbol) ) { if (methodSymbol != null && methodSymbol.IsGenericMethod && methodSymbol.TypeArguments.Length > 0 && !methodSymbol.TypeArguments.Any(SyntaxHelper.IsAnonymous)) { var genericName = SyntaxHelper.GenerateGenericName(node.Identifier, methodSymbol.TypeArguments); return(genericName.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia())); } return(SyntaxFactory.IdentifierName(SyntaxFactory.Identifier(node.GetLeadingTrivia(), symbol.FullyQualifiedName(), node.GetTrailingTrivia()))); } return(node); }