@Override public void visitMethodInvocation(MethodInvocationTree tree) { scan(tree.methodSelect()); scan(tree.typeArguments()); for (ExpressionTree argument : tree.arguments()) { stack.push(null); scan(argument); stack.pop(); } }
private static ExpressionTree getActualArgument(MethodInvocationTree mit) { int arity = mit.arguments().size(); ExpressionTree arg = mit.arguments().get(arity - 1); // Check for assert equals method with delta if (arity > 2 && (arity == 4 || ((Symbol.MethodSymbol) mit.symbol()).parameterTypes().stream().allMatch(AssertionArgumentOrderCheck::isDoubleOrFloat))) { // last arg is actually delta, take the previous last to get the actual arg. arg = mit.arguments().get(arity - 2); } return arg; }
@Override public void visitMethodInvocation(MethodInvocationTree syntaxNode) { if (syntaxNode.methodSelect().is(Tree.Kind.MEMBER_SELECT) && needsClosing(syntaxNode.symbolType())) { final ExpressionTree targetExpression = ((MemberSelectExpressionTree) syntaxNode.methodSelect()).expression(); if (targetExpression.is(Tree.Kind.IDENTIFIER) && !isWithinTryHeader(syntaxNode) && (syntaxNode.symbol().isStatic() || isJdbcResourceCreation(targetExpression))) { programState = programState.addConstraint(programState.peekValue(), new ObjectConstraint(false, false, syntaxNode, Status.OPENED)); } } }
private void buildMethodInvocation(MethodInvocationTree mit) { handleExceptionalPaths(mit.symbol()); currentBlock.elements.add(mit); build(mit.arguments()); if (mit.methodSelect().is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree memberSelect = (MemberSelectExpressionTree) mit.methodSelect(); build(memberSelect.expression()); } else { build(mit.methodSelect()); } }
private static boolean isSuperCloneCall(Tree tree) { if (!tree.is(Kind.METHOD_INVOCATION)) { return false; } MethodInvocationTree mit = (MethodInvocationTree) tree; return mit.arguments().isEmpty() && mit.methodSelect().is(Kind.MEMBER_SELECT) && isSuperClone((MemberSelectExpressionTree) mit.methodSelect()); }
private static Type getMethodOwner(MethodInvocationTree mit) { if (mit.methodSelect().is(Kind.MEMBER_SELECT)) { return ((MemberSelectExpressionTree) mit.methodSelect()).expression().symbolType(); } return mit.symbol().owner().type(); }
private boolean isCallToExitMethod(MethodInvocationTree tree) { String selection = concatenate(tree.methodSelect()); return "System.exit".equals(selection) || "Runtime.getRuntime().exit".equals(selection) || "Runtime.getRuntime().halt".equals(selection); }
@CheckForNull private static ExpressionTree retrievedPropertyDefaultValue(MethodInvocationTree mit) { if (isGetPropertyWithDefaultValue(mit)) { return mit.arguments().get(1); } return null; }
@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() + "\"."); } }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { addThrownTypes(tree.symbol()); super.visitMethodInvocation(tree); }
private static String name(Tree tree) { if (tree.is(Tree.Kind.NEW_CLASS)) { return ((NewClassTree) tree).symbolType().name(); } MethodInvocationTree mit = (MethodInvocationTree) tree; if (mit.symbolType().isVoid()) { return mit.symbol().owner().name(); } return mit.symbolType().name(); }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { if (IS_ZIP_ENTRY.test(tree.symbolType())) { context.reportIssue(this, tree, ISSUE_MESSAGE); } super.visitMethodInvocation(tree); } }
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 isCallToSuper(MethodTree methodTree, Tree callToSuper) { if (callToSuper.is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree methodInvocationTree = (MethodInvocationTree) callToSuper; if (methodInvocationTree.methodSelect().is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree mset = (MemberSelectExpressionTree) methodInvocationTree.methodSelect(); if (callSuperMethodWithSameName(mset, methodTree) && callsWithSameParameters(methodInvocationTree.arguments(), methodTree.parameters())) { return true; } } } return false; }
private static Type getMethodOwnerType(MethodInvocationTree methodSelectTree) { if (methodSelectTree.methodSelect().is(Tree.Kind.MEMBER_SELECT)) { return ((MemberSelectExpressionTree) methodSelectTree.methodSelect()).expression().symbolType(); } else { return methodSelectTree.symbol().owner().type(); } }
private void reportIssue(MethodInvocationTree mit) { String identifier = getIdentifierPart(mit.methodSelect()); String issueMsg = identifier.isEmpty() ? "Optional#" : (identifier + "."); Tree reportTree = mit.methodSelect().is(Tree.Kind.MEMBER_SELECT) ? ((MemberSelectExpressionTree) mit.methodSelect()).expression() : mit; context.reportIssue(reportTree, check, "Call \""+ issueMsg + "isPresent()\" before accessing the value."); }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { if (MAP_GET_METHOD.matches(tree)) { Tree firstArgument = Iterables.getOnlyElement(tree.arguments()); if (mapSymbol.equals(getOwnerSymbol(tree)) && firstArgument.is(Tree.Kind.IDENTIFIER) && ((IdentifierTree) firstArgument).symbol().equals(variable)) { result = true; return; } } super.visitMethodInvocation(tree); } }
@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() + "\"."); } }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { if (isThrowingJavaLangException(tree.symbol())) { return; } super.visitMethodInvocation(tree); }