public override AccessorOrMutator VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { switch (node.Kind()) { case SyntaxKind.SimpleMemberAccessExpression: var left = Visit(node.Expression); var rightAccessor = Visit(node.Name) as Accessor; if (rightAccessor != null) { var leftAccessor = left as Accessor; if (leftAccessor != null) { // Chain accessors to keep them assignable leftAccessor.Append(rightAccessor); return(leftAccessor); } else { return(left.GetMutator(this).Extract(rightAccessor)); } } break; } throw new SyntaxErrorException("Unsupported syntax: " + node); }
public override void VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { if (node.Kind() == SyntaxKind.PointerMemberAccessExpression) { ContainsUnsafe = true; } else { base.VisitMemberAccessExpression(node); } }
private static MemberAccessExpressionSyntax CreateMemberAccessExpressionSyntax(NameSyntax newNameSyntax, MemberAccessExpressionSyntax memberAccessExpressionSyntax, bool isObsoleteTypeKey) { if (newNameSyntax == null) { return(null); } MemberAccessExpressionSyntax newMemberAccess = null; if (newNameSyntax is QualifiedNameSyntax qualifiedNameSyntax) { ExpressionSyntax expressionSyntax = qualifiedNameSyntax.Left; if (memberAccessExpressionSyntax.Expression is ObjectCreationExpressionSyntax objectCreationExpression) { var typeSyntax = SyntaxFactory.ParseTypeName(qualifiedNameSyntax.Left.ToFullString()); if (typeSyntax != null) { var newObjectCreationExpression = objectCreationExpression.WithType(typeSyntax); expressionSyntax = newObjectCreationExpression; } } newMemberAccess = SyntaxFactory.MemberAccessExpression(memberAccessExpressionSyntax.Kind(), expressionSyntax, qualifiedNameSyntax.DotToken, qualifiedNameSyntax.Right); } else if (newNameSyntax is SimpleNameSyntax simpleNameSyntax) { if (isObsoleteTypeKey) { newMemberAccess = memberAccessExpressionSyntax.WithExpression(simpleNameSyntax); } else { newMemberAccess = memberAccessExpressionSyntax.WithName(simpleNameSyntax); } } newMemberAccess = newMemberAccess?.WithTriviaFrom(memberAccessExpressionSyntax); return(newMemberAccess); }
public override async Task ComputeRefactoringsAsync(CodeRefactoringContext context) { SyntaxNode root = await context.Document.GetSyntaxRootAsync(context.CancellationToken); MemberAccessExpressionSyntax node = root .FindNode(context.Span, getInnermostNodeForTie: true)? .FirstAncestorOrSelf <MemberAccessExpressionSyntax>(); if (node?.Kind() != SyntaxKind.SimpleMemberAccessExpression) { return; } ExpressionChainRefactoring.FormatExpressionChain(context, node); if (context.Document.SupportsSemanticModel) { SemanticModel semanticModel = await context.Document.GetSemanticModelAsync(context.CancellationToken); ConvertStringEmptyToEmptyStringLiteral(context, node, semanticModel); } }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node); var memberSymbolInfo = treeContext.Model.GetSymbolInfo(node); if (null == memberSymbolInfo.Symbol) { throw new TranspilationException($"Unresolved symbol: {node}"); } var fieldSymbol = memberSymbolInfo.Symbol as IFieldSymbol; if (null != fieldSymbol) { var elementAccess = node.Expression as ElementAccessExpressionSyntax; if (null != elementAccess) { var objectSymbolInfo = treeContext.Model.GetSymbolInfo(elementAccess.Expression); if (null == objectSymbolInfo.Symbol) { throw new TranspilationException($"Unresolved symbol: {elementAccess.Expression}"); } RewriteInfo rewriteInfo; if (treeContext.Context.RewriteTargets.TryGetValue(objectSymbolInfo.Symbol, out rewriteInfo)) { if (node.Kind() == SyntaxKind.PointerMemberAccessExpression) { throw new TranspilationException($"Unsupported member access: {node}"); } return(SF.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SF.member) rewriteInfo.ElementFieldColumns[fieldSymbol]); } } } }
public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node) { node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node); if ((node.Kind() != SyntaxKind.SimpleMemberAccessExpression)) { return(node); } //only one invocation is skipped. if (node.Parent.Kind() == SyntaxKind.SimpleAssignmentExpression) { bottomUp = 0; return(node); } if (node.Parent.Kind() == SyntaxKind.InvocationExpression) { bottomUp = 0; return(node); } if (node.Parent.Kind() == SyntaxKind.EqualsValueClause) { bottomUp = 0; return(node); } if (node.Parent.Kind() == SyntaxKind.Block) { bottomUp = 0; return(node); } if (node.Parent.Kind() == SyntaxKind.ExpressionStatement) { if (node.Parent.Parent.Kind() == SyntaxKind.Block) { bottomUp = 0; return(node); } } int markedNodesCount = markedNodes.Count(); if (markedNodesCount > 0) { bottomUp++; return(node); } if (bottomUp + 2 < VirtualizationContext.MAX_OPERANDS) { bottomUp++; // return node; } string tempName = TemporaryVarIdentifier; var tempVar = SyntaxFactoryExtensions.LocalVariableDeclaration(tempName, node); var tempIdentifier = SyntaxFactory.IdentifierName(tempName); var tuple = new Tuple <ExpressionSyntax, IdentifierNameSyntax, SyntaxNode>(node, tempIdentifier, tempVar); var parent = GetParentExpression(node); markedNodes.Add(parent); replacementNodes.Add(tuple); bottomUp++; return(node); }