@Override public void visitUnaryExpression(UnaryExpressionTree tree) { if (tree.is(KindSet.INC_DEC_KINDS)) { updatedExpressions.add(tree.expression()); } super.visitUnaryExpression(tree); }
private static boolean isDateException(Tree tree) { if (tree.is(Kind.UNARY_PLUS)) { String exprString = CheckUtils.asString(((UnaryExpressionTree) tree).expression()); return exprString.contains("Date") || exprString.contains("date"); } return false; }
@Override public void visitUnaryExpression(UnaryExpressionTree tree) { if (tree.is(Tree.Kind.POSTFIX_INCREMENT, Tree.Kind.POSTFIX_DECREMENT, Tree.Kind.PREFIX_INCREMENT, Tree.Kind.PREFIX_DECREMENT)) { updatedExpressions.add(tree.expression()); } super.visitUnaryExpression(tree); }
@Override public void visitUnaryExpression(UnaryExpressionTree tree) { if (isIncDec(tree) && tree.expression().is(Tree.Kind.IDENTIFIER_REFERENCE)) { addUsageFor((IdentifierTree) tree.expression(), Usage.Kind.READ_WRITE); } else { super.visitUnaryExpression(tree); } }
@Override public void visitUnaryExpression(UnaryExpressionTree unaryExpression) { if (unaryExpression.is(Kind.TYPEOF)) { ExpressionTree expression = unaryExpression.expression(); if (expression.is(Kind.IDENTIFIER_REFERENCE)) { excludedNames.add(((IdentifierTree) expression).name()); } } super.visitUnaryExpression(unaryExpression); }
@Override public void visitUnaryExpression(UnaryExpressionTree tree) { if (inUpdate && tree.is(KindSet.INC_DEC_KINDS)) { addCurrentLoopCounter(tree.expression()); } super.visitUnaryExpression(tree); }
@Override public void visitUnaryExpression(UnaryExpressionTree tree){ if (tree.is(Kind.DELETE, Kind.TYPEOF, Kind.VOID)){ checkExpression(tree.expression()); } super.visitUnaryExpression(tree); }
@Override public void visitUnaryExpression(UnaryExpressionTree tree) { if (tree.is(Kind.LOGICAL_COMPLEMENT)) { visitExpression(tree.expression()); } super.visitUnaryExpression(tree); }
@CheckForNull public static Double numericValue(ExpressionTree expression) { if (expression.is(Tree.Kind.NUMERIC_LITERAL)) { return Double.valueOf(((LiteralTree) expression).value()); } if (expression.is(Tree.Kind.UNARY_MINUS, Tree.Kind.UNARY_PLUS)) { UnaryExpressionTree unaryExp = (UnaryExpressionTree) expression; Double subExpressionIntValue = numericValue(unaryExp.expression()); return expression.is(Tree.Kind.UNARY_MINUS) ? minus(subExpressionIntValue) : subExpressionIntValue; } return null; }
@CheckForNull public static Double numericValue(ExpressionTree expression) { if (expression.is(Tree.Kind.NUMERIC_LITERAL)) { return Double.valueOf(((LiteralTree) expression).value()); } if (expression.is(Tree.Kind.UNARY_MINUS, Tree.Kind.UNARY_PLUS)) { UnaryExpressionTree unaryExp = (UnaryExpressionTree) expression; Double subExpressionIntValue = numericValue(unaryExp.expression()); return expression.is(Tree.Kind.UNARY_MINUS) ? minus(subExpressionIntValue) : subExpressionIntValue; } return null; }
@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 visitUnaryExpression(UnaryExpressionTree tree) { if (tree.is(Tree.Kind.DELETE) && isArrayElement(tree.expression())){ getContext().addIssue(this, tree, MESSAGE); } super.visitUnaryExpression(tree); }
@Override public void visitExpressionStatement(ExpressionStatementTree tree) { if (tree.expression().is(KindSet.INC_DEC_KINDS)) { scan(((UnaryExpressionTree) tree.expression()).expression()); } else { scan(tree.expression()); } }
private void scanUpdateClause(@Nullable ExpressionTree tree) { if (tree != null) { if (tree.is(KindSet.INC_DEC_KINDS)) { scan(((UnaryExpressionTree) tree).expression()); } else if (tree.is(Kind.COMMA_OPERATOR)) { BinaryExpressionTree expressionList = (BinaryExpressionTree) tree; scanUpdateClause(expressionList.leftOperand()); scanUpdateClause(expressionList.rightOperand()); } else { scan(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 visitUnaryExpression(UnaryExpressionTree tree) { ExpressionTree argument = CheckUtils.removeParenthesis(tree.expression()); if (tree.is(Tree.Kind.DELETE) && !isMemberAccess(argument) && !isGlobalProperty(argument)) { addIssue(tree, MESSAGE); } super.visitUnaryExpression(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("Remove this %s or correct the code not to waste it.", type); getContext().addIssue(this, postfix, 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()); } } }
private static boolean isIIFE(ExpressionTree expression) { if (expression.is(Kind.CALL_EXPRESSION)) { CallExpressionTree callExpressionTree = (CallExpressionTree) expression; ExpressionTree callee = CheckUtils.removeParenthesis(callExpressionTree.callee()); return callee.is(Kind.FUNCTION_EXPRESSION, Kind.ARROW_FUNCTION); } else if (expression.is(Kind.LOGICAL_COMPLEMENT)) { ExpressionTree operand = ((UnaryExpressionTree) expression).expression(); return isIIFE(CheckUtils.removeParenthesis(operand)); } return false; }