private void raiseIssue(UnaryExpressionTree tree) { String message = String.format(MESSAGE, "++".equals(tree.operatorToken().text()) ? "increment" : "decrement"); addIssue(tree.operatorToken(), message); } }
@Override void raiseIssue(UnaryExpressionTree tree) { if (!isDateException(tree)) { SyntaxToken operator = tree.operatorToken(); addIssue(operator, String.format(MESSAGE, operator.text())); } }
@Override public void visitNode(Tree tree) { UnaryExpressionTree voidExpression = (UnaryExpressionTree) tree; ExpressionTree operand = CheckUtils.removeParenthesis(voidExpression.expression()); if (!isZero(operand)) { addIssue(voidExpression.operatorToken(), MESSAGE); } }
@Override public void visitUnaryExpression(UnaryExpressionTree tree) { if (tree.is(Tree.Kind.DELETE) && isArrayElement(tree.expression())) { addIssue(tree.operatorToken(), MESSAGE); } super.visitUnaryExpression(tree); }
@Override public void visitNode(Tree tree) { AssignmentExpressionTree assignment = (AssignmentExpressionTree) tree; ExpressionTree expression = assignment.expression(); if (expression.is(Kind.UNARY_PLUS, Kind.UNARY_MINUS, Kind.LOGICAL_COMPLEMENT)) { UnaryExpressionTree unaryExpression = (UnaryExpressionTree) expression; SyntaxToken assignmentOperator = assignment.operatorToken(); SyntaxToken expressionOperator = unaryExpression.operatorToken(); if (areAdjacent(assignmentOperator, expressionOperator) && !areAdjacent(expressionOperator, unaryExpression.expression())) { String message = String.format(MESSAGE, unaryExpression.operatorToken()); addIssue(new PreciseIssue(this, new IssueLocation(assignmentOperator, expressionOperator, message))); } } super.visitNode(tree); }
@Override public void visitAssignmentExpression(AssignmentExpressionTree assignment) { if (assignment.expression().is(Tree.Kind.POSTFIX_INCREMENT, Tree.Kind.POSTFIX_DECREMENT)) { UnaryExpressionTree postfix = (UnaryExpressionTree) assignment.expression(); if (SyntacticEquivalence.areEquivalent(assignment.variable(), postfix.expression())) { String type = postfix.is(Tree.Kind.POSTFIX_INCREMENT) ? "increment" : "decrement"; String message = String.format(MESSAGE, type); addIssue(postfix.operatorToken(), message); } } super.visitAssignmentExpression(assignment); }
@Override public void beforeBlockElement(ProgramState currentState, Tree element, ProgramPoint programPoint) { if (element.is(PLUS_KINDS) || element.is(COMPARISON_KINDS) || element.is(ARITHMETIC_KINDS)) { checkBinaryOperation(currentState, element); } if (element.is(UNARY_KINDS)) { Type operandType = currentState.getConstraint(currentState.peekStack()).type(); ExpressionTree operand = ((UnaryExpressionTree) element).expression(); if (BOOLEAN_STRING_DATE.contains(operandType)) { raiseIssue(operand, ((UnaryExpressionTree) element).operatorToken()); } } }
@Override public void beforeBlockElement(ProgramState currentState, Tree element, ProgramPoint programPoint) { if (programPoint instanceof BinaryProgramPoint) { final BinaryProgramPoint binaryPoint = (BinaryProgramPoint) programPoint; final Constraint resultConstraint = binaryPoint.resultingConstraint(currentState); if (resultConstraint.isStricterOrEqualTo(Constraint.NAN)) { final ExpressionComponents components = new ExpressionComponents(element); if (binaryPoint.firstOperandConstraint().isStricterOrEqualTo(UNDEFINED_OR_NON_NUMBER_OBJECT)) { raiseIssue(components.leftOperand, components.operator, components.rightOperand); } else { raiseIssue(components.rightOperand, components.operator, components.leftOperand); } } } else if (element.is( Kind.UNARY_PLUS, Kind.UNARY_MINUS, Kind.POSTFIX_INCREMENT, Kind.POSTFIX_DECREMENT, Kind.PREFIX_INCREMENT, Kind.PREFIX_DECREMENT)) { Constraint constraint = currentState.getConstraint(currentState.peekStack(0)); if (constraint.isStricterOrEqualTo(UNDEFINED_OR_NON_NUMBER_OBJECT)) { UnaryExpressionTree unaryExpression = (UnaryExpressionTree) element; raiseIssue(unaryExpression.expression(), unaryExpression.operatorToken()); } } }