private static boolean invocationInMethod(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD)) { parent = parent.parent(); } return parent != null; }
private static boolean invocationInMethod(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD)) { parent = parent.parent(); } return parent != null; }
@CheckForNull private static MethodInvocationTree parentMethodInvocation(MethodInvocationTree method) { Tree parent = method.parent(); if (parent.is(Tree.Kind.MEMBER_SELECT)) { parent = parent.parent(); if (parent.is(Tree.Kind.METHOD_INVOCATION)) { return (MethodInvocationTree) parent; } } return null; }
private static boolean isInTryCatch(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.TRY_STATEMENT)) { parent = parent.parent(); } return parent != null && !((TryStatementTree) parent).catches().isEmpty(); }
@CheckForNull private static MethodInvocationTree parentMethodInvocation(MethodInvocationTree method) { Tree parent = method.parent(); if (parent.is(Tree.Kind.MEMBER_SELECT)) { parent = parent.parent(); if (parent.is(Tree.Kind.METHOD_INVOCATION)) { return (MethodInvocationTree) parent; } } return null; }
private static boolean isInTryCatch(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.TRY_STATEMENT)) { parent = parent.parent(); } return parent != null && !((TryStatementTree) parent).catches().isEmpty(); }
private static boolean storedInStaticFinal(MethodInvocationTree mit) { Tree tree = mit.parent(); while (!tree.is(Kind.VARIABLE, Kind.ASSIGNMENT, Kind.COMPILATION_UNIT)) { tree = tree.parent(); } return isConstant(tree); }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); if (parent.is(Tree.Kind.TYPE_CAST)) { checkCast(((TypeCastTree) parent).symbolType(), mit); } }
private static boolean storedInStaticFinal(MethodInvocationTree mit) { Tree tree = mit.parent(); while (!tree.is(Kind.VARIABLE, Kind.ASSIGNMENT, Kind.COMPILATION_UNIT)) { tree = tree.parent(); } return isConstant(tree); }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); if (parent.is(Tree.Kind.TYPE_CAST)) { checkCast(((TypeCastTree) parent).symbolType(), mit); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { if (!"openConnection".equals(mit.symbol().name()) || isCastToHttpUrlConnection(mit.parent())) { reportIssue(ExpressionUtils.methodName(mit), "Make sure that this http request is sent safely."); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { if (!"openConnection".equals(mit.symbol().name()) || isCastToHttpUrlConnection(mit.parent())) { reportIssue(ExpressionUtils.methodName(mit), "Make sure that this http request is sent safely."); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD)) { parent = parent.parent(); } if (parent != null && THREAD_RUN_METHOD_MATCHER.matches((MethodTree) parent)) { return; } reportIssue(ExpressionUtils.methodName(mit), "Call the method Thread.start() to execute the content of the run() method in a dedicated thread."); }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD)) { parent = parent.parent(); } if (parent != null && THREAD_RUN_METHOD_MATCHER.matches((MethodTree) parent)) { return; } reportIssue(ExpressionUtils.methodName(mit), "Call the method Thread.start() to execute the content of the run() method in a dedicated thread."); }
private static boolean isInsideIfStatementWithNullCheckWithoutElse(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.IF_STATEMENT)) { parent = parent.parent(); } if (parent == null) { return false; } IfStatementTree ifStatementTree = (IfStatementTree) parent; return ifStatementTree.elseStatement() == null && isNullCheck(ExpressionUtils.skipParentheses(ifStatementTree.condition())); }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); if (parent.is(Tree.Kind.EXPRESSION_STATEMENT) || (parent.is(Tree.Kind.VARIABLE) && ((VariableTree) parent).symbol().usages().isEmpty())) { reportIssue(parent, "Do something with the \"" + mit.symbolType().name() + "\" value returned by \"" + mit.symbol().name() + "\"."); } }
private static boolean isInsideIfStatementWithNullCheckWithoutElse(MethodInvocationTree mit) { Tree parent = mit.parent(); while (parent != null && !parent.is(Tree.Kind.IF_STATEMENT)) { parent = parent.parent(); } if (parent == null) { return false; } IfStatementTree ifStatementTree = (IfStatementTree) parent; return ifStatementTree.elseStatement() == null && isNullCheck(ExpressionUtils.skipParentheses(ifStatementTree.condition())); }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); if (parent.is(Tree.Kind.EXPRESSION_STATEMENT) || (parent.is(Tree.Kind.VARIABLE) && ((VariableTree) parent).symbol().usages().isEmpty())) { reportIssue(parent, "Do something with the \"" + mit.symbolType().name() + "\" value returned by \"" + mit.symbol().name() + "\"."); } }
private void handleAnyMatch(MethodInvocationTree anyMatchMIT) { ExpressionTree predicate = anyMatchMIT.arguments().get(0); IdentifierTree reportTree = ExpressionUtils.methodName(anyMatchMIT); if (anyMatchMIT.parent().is(Tree.Kind.LOGICAL_COMPLEMENT)) { if (predicate.is(Tree.Kind.LAMBDA_EXPRESSION) && ((LambdaExpressionTree) predicate).body().is(Tree.Kind.LOGICAL_COMPLEMENT)) { // !stream.anyMatch(x -> !(...)) context.reportIssue(this, reportTree, "Replace this double negation with \"allMatch()\" and positive predicate."); } else { context.reportIssue(this, reportTree, "Replace this negation and \"anyMatch()\" with \"noneMatch()\"."); } } if (predicate.is(Tree.Kind.METHOD_REFERENCE) && isBooleanValueReference((MethodReferenceTree) predicate)) { previousMITInChain(anyMatchMIT) .filter(MAP_METHODS::anyMatch) .ifPresent(mapMIT -> context.reportIssue(this, reportTree, "Use mapper from \"map()\" directly as predicate in \"anyMatch()\".")); } }
private void handleAnyMatch(MethodInvocationTree anyMatchMIT) { ExpressionTree predicate = anyMatchMIT.arguments().get(0); IdentifierTree reportTree = ExpressionUtils.methodName(anyMatchMIT); if (anyMatchMIT.parent().is(Tree.Kind.LOGICAL_COMPLEMENT)) { if (predicate.is(Tree.Kind.LAMBDA_EXPRESSION) && ((LambdaExpressionTree) predicate).body().is(Tree.Kind.LOGICAL_COMPLEMENT)) { // !stream.anyMatch(x -> !(...)) context.reportIssue(this, reportTree, "Replace this double negation with \"allMatch()\" and positive predicate."); } else { context.reportIssue(this, reportTree, "Replace this negation and \"anyMatch()\" with \"noneMatch()\"."); } } if (predicate.is(Tree.Kind.METHOD_REFERENCE) && isBooleanValueReference((MethodReferenceTree) predicate)) { previousMITInChain(anyMatchMIT) .filter(MAP_METHODS::anyMatch) .ifPresent(mapMIT -> context.reportIssue(this, reportTree, "Use mapper from \"map()\" directly as predicate in \"anyMatch()\".")); } }