@Override public void visitAssignment(Assignment node) { lombok.ast.BinaryExpression bin = new lombok.ast.BinaryExpression(); bin.astLeft((lombok.ast.Expression) toTree(node.lhs)); bin.astRight(((lombok.ast.Expression) toTree(node.expression))); bin.astOperator(BinaryOperator.ASSIGN); setPosition(node, bin); set(node, bin); }
@Override public void visitAssign(JCAssign node) { BinaryExpression expr = new BinaryExpression(); expr.rawRight(toTree(node.getExpression())); expr.rawLeft(toTree(node.getVariable())); expr.astOperator(BinaryOperator.ASSIGN); set(node, expr); }
public Node createAssignmentExpression(Node lhs, String operator, Node rhs) { if (rhs == null && operator == null) return lhs; return posify(new BinaryExpression().rawLeft(lhs).rawRight(rhs).rawOperator(operator)); }
@Override public void afterVisitBinaryExpression(BinaryExpression node) { if (node.astOperator() == BinaryOperator.ASSIGN) { Expression rhs = node.astRight(); ResolvedClass resolvedClass = mTypes.get(rhs); if (resolvedClass != null) { Expression lhs = node.astLeft(); mTypes.put(lhs, resolvedClass); ResolvedNode variable = mContext.resolve(lhs); if (variable instanceof ResolvedVariable) { mVariableTypes.put((ResolvedVariable) variable, resolvedClass); } } } }
private boolean tryStringCombine(BinaryExpression node) { if (node.getParens() > 0) { } else if (node.getParent() instanceof BinaryExpression) { try { if (!((BinaryExpression)node.getParent()).astOperator().isAssignment()) return false; } catch (AstException ignore) { return false; } else if (node.getParent() instanceof InstanceOf) { return false; while (true) { start = Math.min(start, posOfStructure(current, "+", true)); if (current.rawRight() instanceof StringLiteral && current.astRight().getParens() == 0) { buffer.add(((StringLiteral)current.rawRight()).astValue()); } else { return false; if (current.rawLeft() instanceof BinaryExpression) { current = (BinaryExpression) current.rawLeft(); try { if (current.astOperator() != BinaryOperator.PLUS || current.getParens() > 0) return false; } catch (AstException e) { return false; } else if (current.rawLeft() instanceof StringLiteral && current.astLeft().getParens() == 0) { buffer.add(((StringLiteral)current.rawLeft()).astValue()); break; } else {
@Override public boolean visitBinaryExpression(BinaryExpression node) { BinaryOperator operator = node.astOperator(); int start = posOfStructure(node, node.rawOperator(), true); int end = node.getPosition().getEnd(); if (operator == BinaryOperator.PLUS) { if (tryStringCombine(node)) return true; } JCExpression lhs = toExpression(node.astLeft()); JCExpression rhs = toExpression(node.astRight()); if (operator == BinaryOperator.ASSIGN) { return set(node, setPos(start, end, treeMaker.Assign(lhs, rhs))); } if (operator.isAssignment()) { return set(node, setPos(start, end, treeMaker.Assignop(BINARY_OPERATORS.get(operator), lhs, rhs))); } return set(node, setPos(start, end, treeMaker.Binary(BINARY_OPERATORS.get(operator), lhs, rhs))); }
@Override public boolean visitBinaryExpression(BinaryExpression node) { parensOpen(node); String symbol; try { symbol = node.astOperator().getSymbol(); } catch (Exception e) { symbol = node.rawOperator(); } formatter.buildInline(node); formatter.property("operator", symbol); formatter.nameNextElement("left"); visit(node.rawLeft()); formatter.space(); formatter.operator(symbol); formatter.space(); formatter.nameNextElement("right"); visit(node.rawRight()); formatter.closeInline(); parensClose(node); return true; }
@Override public boolean visitBinaryExpression(BinaryExpression node) { BinaryOperator operator = node.astOperator(); if (operator == BinaryOperator.ASSIGN || operator == BinaryOperator.OR_ASSIGN) { Expression left = node.astLeft(); String variable; if (left instanceof Select && ((Select) left).astOperand() instanceof This) { variable = ((Select) left).astIdentifier().astValue(); } else { variable = left.toString(); } mVariables.add(variable); } return super.visitBinaryExpression(node); } }
int otherPLevel; try { otherPLevel = be.astOperator().pLevel(); } catch (Throwable ignore) { return true; if (be.rawLeft() == self) { return pLevel == BinaryOperator.ASSIGN.pLevel(); if (be.rawRight() == self) { return pLevel != BinaryOperator.ASSIGN.pLevel();
/** * Checks whether the given expression is purely a non-null check, e.g. it will return * true for expressions like "a != null" and "a != null && b != null" and * "b == null || c != null". */ private static boolean isNullCheck(Expression expression) { if (expression instanceof BinaryExpression) { BinaryExpression binExp = (BinaryExpression) expression; if (binExp.astLeft() instanceof NullLiteral || binExp.astRight() instanceof NullLiteral) { return true; } else { return isNullCheck(binExp.astLeft()) && isNullCheck(binExp.astRight()); } } else { return false; } } }
@CopyMethod static String getDescription(BinaryExpression self) { try { return self.astOperator().getSymbol(); } catch (Exception e) { return self.rawOperator(); } }
@CopyMethod static boolean needsParentheses(Expression self) { try { return needsParentheses(self, ((BinaryExpression)self).astOperator().pLevel()); } catch (Throwable ignore) { return true; } }
@Nullable private static String getLhs(@NonNull MethodInvocation call) { Node parent = call.getParent(); if (parent instanceof Cast) { parent = parent.getParent(); } if (parent instanceof VariableDefinitionEntry) { VariableDefinitionEntry vde = (VariableDefinitionEntry) parent; return vde.astName().astValue(); } else if (parent instanceof BinaryExpression) { BinaryExpression be = (BinaryExpression) parent; Expression left = be.astLeft(); if (left instanceof VariableReference || left instanceof Select) { return be.astLeft().toString(); } else if (left instanceof ArrayAccess) { ArrayAccess aa = (ArrayAccess) left; return aa.astOperand().toString(); } } return null; }
@Override public boolean visitBinaryExpression(BinaryExpression node) { if (node.astOperator() == BinaryOperator.ASSIGN) { Expression rhs = node.astRight(); if (rhs instanceof VariableReference) { JavaParser.ResolvedNode resolved = mContext.resolve(rhs); //noinspection SuspiciousMethodCalls if (resolved != null && mVariables.contains(resolved)) { JavaParser.ResolvedNode resolvedLhs = mContext.resolve(node.astLeft()); if (resolvedLhs instanceof JavaParser.ResolvedVariable) { JavaParser.ResolvedVariable variable = (JavaParser.ResolvedVariable) resolvedLhs; mVariables.add(variable); } } } } return super.visitBinaryExpression(node); }
private boolean tryStringCombine(BinaryExpression node) { if (node.getParens() > 0) { } else if (node.getParent() instanceof BinaryExpression) { try { if (!((BinaryExpression)node.getParent()).astOperator().isAssignment()) return false; } catch (AstException ignore) { return false; } else if (node.getParent() instanceof InstanceOf) { return false; while (true) { start = Math.min(start, posOfStructure(current, "+", true)); if (current.rawRight() instanceof StringLiteral && current.astRight().getParens() == 0) { buffer.add(((StringLiteral)current.rawRight()).astValue()); } else { return false; if (current.rawLeft() instanceof BinaryExpression) { current = (BinaryExpression) current.rawLeft(); try { if (current.astOperator() != BinaryOperator.PLUS || current.getParens() > 0) return false; } catch (AstException e) { return false; } else if (current.rawLeft() instanceof StringLiteral && current.astLeft().getParens() == 0) { buffer.add(((StringLiteral)current.rawLeft()).astValue()); break; } else {
@Override public boolean visitBinaryExpression(BinaryExpression node) { BinaryOperator operator = node.astOperator(); int start = posOfStructure(node, node.rawOperator(), true); int end = node.getPosition().getEnd(); if (operator == BinaryOperator.PLUS) { if (tryStringCombine(node)) return true; } JCExpression lhs = toExpression(node.astLeft()); JCExpression rhs = toExpression(node.astRight()); if (operator == BinaryOperator.ASSIGN) { return set(node, setPos(start, end, treeMaker.Assign(lhs, rhs))); } if (operator.isAssignment()) { return set(node, setPos(start, end, treeMaker.Assignop(BINARY_OPERATORS.get(operator), lhs, rhs))); } return set(node, setPos(start, end, treeMaker.Binary(BINARY_OPERATORS.get(operator), lhs, rhs))); }
@Override public boolean visitBinaryExpression(BinaryExpression node) { parensOpen(node); String symbol; try { symbol = node.astOperator().getSymbol(); } catch (Exception e) { symbol = node.rawOperator(); } formatter.buildInline(node); formatter.property("operator", symbol); formatter.nameNextElement("left"); visit(node.rawLeft()); formatter.space(); formatter.operator(symbol); formatter.space(); formatter.nameNextElement("right"); visit(node.rawRight()); formatter.closeInline(); parensClose(node); return true; }
@Nullable public static ResolvedVariable getVariable(@NonNull JavaContext context, @NonNull Node expression) { Node parent = expression.getParent(); if (parent instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) parent; if (binaryExpression.astOperator() == BinaryOperator.ASSIGN) { Expression lhs = binaryExpression.astLeft(); ResolvedNode resolved = context.resolve(lhs); if (resolved instanceof ResolvedVariable) { return (ResolvedVariable) resolved; } } } else if (parent instanceof VariableDefinitionEntry) { ResolvedNode resolved = context.resolve(parent); if (resolved instanceof ResolvedVariable) { return (ResolvedVariable) resolved; } } return null; }
int otherPLevel; try { otherPLevel = be.astOperator().pLevel(); } catch (Throwable ignore) { return true; if (be.rawLeft() == self) { return pLevel == BinaryOperator.ASSIGN.pLevel(); if (be.rawRight() == self) { return pLevel != BinaryOperator.ASSIGN.pLevel();
/** Adds any variables referenced in the given expression into the given list */ private static void addReferencedVariables(Collection<String> variables, Expression expression) { if (expression instanceof BinaryExpression) { BinaryExpression binary = (BinaryExpression) expression; addReferencedVariables(variables, binary.astLeft()); addReferencedVariables(variables, binary.astRight()); } else if (expression instanceof UnaryExpression) { UnaryExpression unary = (UnaryExpression) expression; addReferencedVariables(variables, unary.astOperand()); } else if (expression instanceof VariableReference) { VariableReference reference = (VariableReference) expression; variables.add(reference.astIdentifier().astValue()); } else if (expression instanceof Select) { Select select = (Select) expression; if (select.astOperand() instanceof This) { variables.add(select.astIdentifier().astValue()); } } }