private static SyntaxToken operatorToken(Tree tree) { if (tree instanceof BinaryExpressionTree) { return ((BinaryExpressionTree) tree).operatorToken(); } return ((AssignmentExpressionTree) tree).operatorToken(); }
private static SyntaxToken operatorToken(Tree tree) { if (tree instanceof BinaryExpressionTree) { return ((BinaryExpressionTree) tree).operatorToken(); } return ((AssignmentExpressionTree) tree).operatorToken(); }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { super.visitAssignmentExpression(tree); context.reportIssue(this, tree.operatorToken(), "Extract the assignment out of this expression."); }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { super.visitAssignmentExpression(tree); context.reportIssue(this, tree.operatorToken(), "Extract the assignment out of this expression."); }
@Override public void visitNode(Tree tree) { AssignmentExpressionTree node = (AssignmentExpressionTree) tree; if (SyntacticEquivalence.areEquivalent(node.expression(), node.variable())) { reportIssue(node.operatorToken(), "Remove or correct this useless self-assignment."); } }
@Override public void visitNode(Tree tree) { AssignmentExpressionTree node = (AssignmentExpressionTree) tree; if (SyntacticEquivalence.areEquivalent(node.expression(), node.variable())) { reportIssue(node.operatorToken(), "Remove or correct this useless self-assignment."); } }
private void handleAssignment(Set<Symbol> out, Set<Tree> assignmentLHS, AssignmentExpressionTree element) { ExpressionTree lhs = ExpressionUtils.skipParentheses(element.variable()); if (lhs.is(Tree.Kind.IDENTIFIER)) { Symbol symbol = ((IdentifierTree) lhs).symbol(); if (isLocalVariable(symbol) && !out.contains(symbol) && (element.is(Tree.Kind.ASSIGNMENT) || isParentExpressionStatement(element))) { createIssue(element.operatorToken(), element.expression(), symbol); } assignmentLHS.add(lhs); if (element.is(Tree.Kind.ASSIGNMENT)) { out.remove(symbol); } else { out.add(symbol); } } }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); ExpressionTree condition = tree.condition(); if (condition.is(Tree.Kind.ASSIGNMENT) && EQUALITY_RELATIONAL_OPERATORS.contains(((AssignmentExpressionTree) condition).expression().kind())) { raiseIssue(((AssignmentExpressionTree) condition).operatorToken().line(), tree); } }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); ExpressionTree condition = tree.condition(); if (condition.is(Tree.Kind.ASSIGNMENT) && EQUALITY_RELATIONAL_OPERATORS.contains(((AssignmentExpressionTree) condition).expression().kind())) { raiseIssue(((AssignmentExpressionTree) condition).operatorToken().line(), tree); } }
private void handleAssignment(Set<Symbol> out, Set<Tree> assignmentLHS, AssignmentExpressionTree element) { ExpressionTree lhs = ExpressionUtils.skipParentheses(element.variable()); if (lhs.is(Tree.Kind.IDENTIFIER)) { Symbol symbol = ((IdentifierTree) lhs).symbol(); if (isLocalVariable(symbol) && !out.contains(symbol) && (element.is(Tree.Kind.ASSIGNMENT) || isParentExpressionStatement(element))) { createIssue(element.operatorToken(), element.expression(), symbol); } assignmentLHS.add(lhs); if (element.is(Tree.Kind.ASSIGNMENT)) { out.remove(symbol); } else { out.add(symbol); } } }
@Override public void visitIfStatement(IfStatementTree tree) { super.visitIfStatement(tree); ExpressionTree condition = tree.condition(); if (condition.is(Tree.Kind.ASSIGNMENT) && EQUALITY_RELATIONAL_OPERATORS.contains(((AssignmentExpressionTree) condition).expression().kind())) { raiseIssue(((AssignmentExpressionTree) condition).operatorToken().line(), tree); } }
@Override public void visitNode(Tree tree) { ExpressionTree expression; SyntaxToken operatorToken; if (tree.is(Kind.OR, Kind.XOR, Kind.AND)) { BinaryExpressionTree binary = (BinaryExpressionTree) tree; expression = binary.rightOperand(); operatorToken = binary.operatorToken(); } else { AssignmentExpressionTree assignment = (AssignmentExpressionTree) tree; expression = assignment.expression(); operatorToken = assignment.operatorToken(); } Long evaluatedExpression = LiteralUtils.longLiteralValue(expression); if (evaluatedExpression != null && getBitwiseOperationIdentityElement(tree).equals(evaluatedExpression)) { reportIssue(operatorToken, "Remove this silly bit operation."); } }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { ExpressionTree variable = tree.variable(); ExpressionTree expression = tree.expression(); addKind(variable, UastNode.Kind.ASSIGNMENT_TARGET); addKind(tree.operatorToken(), UastNode.Kind.ASSIGNMENT_OPERATOR); addKind(expression, UastNode.Kind.ASSIGNMENT_VALUE); super.visitAssignmentExpression(tree); }
@Override public void visitNode(Tree tree) { ExpressionTree expression; SyntaxToken operatorToken; if (tree.is(Kind.OR, Kind.XOR, Kind.AND)) { BinaryExpressionTree binary = (BinaryExpressionTree) tree; expression = binary.rightOperand(); operatorToken = binary.operatorToken(); } else { AssignmentExpressionTree assignment = (AssignmentExpressionTree) tree; expression = assignment.expression(); operatorToken = assignment.operatorToken(); } Long evaluatedExpression = LiteralUtils.longLiteralValue(expression); if (evaluatedExpression != null && getBitwiseOperationIdentityElement(tree).equals(evaluatedExpression)) { reportIssue(operatorToken, "Remove this silly bit operation."); } }
@Override public void visitNode(Tree tree) { AssignmentExpressionTree aeTree = (AssignmentExpressionTree) tree; SyntaxToken operatorToken = aeTree.operatorToken(); SyntaxToken expressionFirstToken = aeTree.expression().firstToken(); SyntaxToken variableLastToken = aeTree.variable().lastToken(); if (isSuspiciousToken(expressionFirstToken) && noSpacingBetween(operatorToken, expressionFirstToken) && !noSpacingBetween(variableLastToken, operatorToken)) { reportIssue(operatorToken, expressionFirstToken, getMessage(expressionFirstToken, aeTree)); } }
@Override public void visitNode(Tree tree) { AssignmentExpressionTree aeTree = (AssignmentExpressionTree) tree; SyntaxToken operatorToken = aeTree.operatorToken(); SyntaxToken expressionFirstToken = aeTree.expression().firstToken(); SyntaxToken variableLastToken = aeTree.variable().lastToken(); if (isSuspiciousToken(expressionFirstToken) && noSpacingBetween(operatorToken, expressionFirstToken) && !noSpacingBetween(variableLastToken, operatorToken)) { reportIssue(operatorToken, expressionFirstToken, getMessage(expressionFirstToken, aeTree)); } }
private void checkShiftTree(Tree tree, int treeIndex) { String identifier; ExpressionTree shift; SyntaxToken operatorToken; if (tree.is(Kind.LEFT_SHIFT, Kind.RIGHT_SHIFT)) { BinaryExpressionTree binaryExpressionTree = (BinaryExpressionTree) tree; if (isZeroMaskShift(binaryExpressionTree)) { // No issue should be reported for "1 << 0" or "1 >> 0" return; } identifier = getIdentifierName(binaryExpressionTree.leftOperand()); shift = binaryExpressionTree.rightOperand(); operatorToken = binaryExpressionTree.operatorToken(); } else { AssignmentExpressionTree assignmentExpressionTree = (AssignmentExpressionTree) tree; identifier = getIdentifierName(assignmentExpressionTree.variable()); shift = assignmentExpressionTree.expression(); operatorToken = assignmentExpressionTree.operatorToken(); } checkShift((ExpressionTree) tree, shift, identifier, operatorToken, treeIndex); }
private void checkShiftTree(Tree tree, int treeIndex) { String identifier; ExpressionTree shift; SyntaxToken operatorToken; if (tree.is(Kind.LEFT_SHIFT, Kind.RIGHT_SHIFT)) { BinaryExpressionTree binaryExpressionTree = (BinaryExpressionTree) tree; if (isZeroMaskShift(binaryExpressionTree)) { // No issue should be reported for "1 << 0" or "1 >> 0" return; } identifier = getIdentifierName(binaryExpressionTree.leftOperand()); shift = binaryExpressionTree.rightOperand(); operatorToken = binaryExpressionTree.operatorToken(); } else { AssignmentExpressionTree assignmentExpressionTree = (AssignmentExpressionTree) tree; identifier = getIdentifierName(assignmentExpressionTree.variable()); shift = assignmentExpressionTree.expression(); operatorToken = assignmentExpressionTree.operatorToken(); } checkShift((ExpressionTree) tree, shift, identifier, operatorToken, treeIndex); }