private async Task <Document> SwapMethodCalls(Document document, InvocationExpressionSyntax typeDecl, CancellationToken cancellationToken) { IEnumerable <SyntaxNode> children = typeDecl.ChildNodes(); Debug.Assert(children.Count() > 0); MemberAccessExpressionSyntax sliceAccess = children.ElementAt(0) as MemberAccessExpressionSyntax; IEnumerable <SyntaxNode> grandChildren = sliceAccess.ChildNodes(); Debug.Assert(grandChildren.Count() > 0); SyntaxNode target = grandChildren.ElementAt(0); MemberAccessExpressionSyntax parent = typeDecl.Parent as MemberAccessExpressionSyntax; MemberAccessExpressionSyntax newLocal = parent.ReplaceNode(typeDecl, target); MemberAccessExpressionSyntax formattedLocal = newLocal.WithAdditionalAnnotations(Formatter.Annotation); InvocationExpressionSyntax replacement = typeDecl.ReplaceNode(target, formattedLocal).WithAdditionalAnnotations(Formatter.Annotation); SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken); SyntaxNode newRoot = oldRoot.ReplaceNode(parent, replacement); // Return document with transformed tree. return(document.WithSyntaxRoot(newRoot)); }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node); if (node.Expression != null && node.OperatorToken.Kind() == SyntaxKind.DotToken && node.Expression.Kind() == SyntaxKind.PredefinedType) { _count++; return(node.WithAdditionalAnnotations(s_markerAnnotation)); } return(node); }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node); var name = node.Name.Identifier.ValueText; if (node.Expression != null && node.Expression.Kind() == SyntaxKind.ThisExpression && IsPrivateField(node)) { _addedAnnotations = true; return node.WithAdditionalAnnotations(Simplifier.Annotation); } return node; }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node); var name = node.Name.Identifier.ValueText; if (node.Expression != null && node.Expression.Kind() == SyntaxKind.ThisExpression && IsPrivateField(node)) { m_addedAnnotations = true; return(node.WithAdditionalAnnotations(Simplifier.Annotation)); } return(node); }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { if (!Options.FullyQualifiedNames && node.IsKind(SyntaxKind.SimpleMemberAccessExpression)) { ISymbol symbol = SemanticModel.GetSymbol(node, CancellationToken); if (symbol?.Kind == SymbolKind.Field && symbol.ContainingType?.TypeKind == TypeKind.Enum) { return(node.WithAdditionalAnnotations(_simplifierAnnotationAsArray)); } } return(base.VisitMemberAccessExpression(node)); }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node); var name = node.Name.Identifier.ValueText; if (node.Expression != null) { bool shouldReduce = ReducableThisNode(node) || ReducableIdentifierNode(node); if (shouldReduce) { _addedAnnotations = true; return(node.WithAdditionalAnnotations(Simplifier.Annotation)); } } return(node); }
public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { if (_enumTypeSymbol != null && !node.IsParentKind(SyntaxKind.SimpleMemberAccessExpression)) { MemberAccessExpressionSyntax newNode = CSharpFactory.SimpleMemberAccessExpression( SyntaxFactory.ParseExpression(_enumTypeSymbol.ToDisplayString(SymbolDisplayFormats.TypeNameAndContainingTypesAndNamespaces)), node); if (!Options.FullyQualifiedNames) { newNode = newNode.WithAdditionalAnnotations(_simplifierAnnotationAsArray); } return(newNode); } return(base.VisitIdentifierName(node)); }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)(base.VisitMemberAccessExpression(node) ?? throw ExceptionUtilities.Unreachable); if (_extensionMethods.Contains(node.Name.Identifier.Text)) { // If an extension method is used as a delegate rather than invoked directly, // there is no semantically valid transformation that will fully qualify the extension method. // For example `Func<int> f = x.M;` is not the same as Func<int> f = () => Extensions.M(x);` // since one captures x by value, and the other by reference. // // We will not visit this node if the parent node was an InvocationExpression, // since we would have expanded the parent node entirely, rather than visiting it. // Therefore it's possible that this is an extension method being used as a delegate so we warn. node = node.WithAdditionalAnnotations(WarningAnnotation.Create(string.Format( WorkspacesResources.Warning_adding_imports_will_bring_an_extension_method_into_scope_with_the_same_name_as_member_access, node.Name.Identifier.Text))); } return(node); }