private static List<StringConstant> antMatchersPatterns(MethodInvocationTree mit) { return mit.arguments().stream() .map(StringConstant::of) .filter(Objects::nonNull) .collect(Collectors.toList()); }
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; }
@CheckForNull private static ExpressionTree retrievedPropertyDefaultValue(MethodInvocationTree mit) { if (isGetPropertyWithDefaultValue(mit)) { return mit.arguments().get(1); } return null; }
@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); } }
private boolean checkEmptyParams(MethodInvocationTree mit, Collection<?> params) { if (params.isEmpty() && (!LEVELS.contains(mit.symbol().name()) || mit.arguments().size() > 1)) { reportIssue(mit, "String contains no format specifiers."); return true; } return false; }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { if (this.owner == tree.symbol().owner()) { return; } tree.arguments().stream().filter(ExpressionUtils::isThis).forEach(this::report); super.visitMethodInvocation(tree); }
private void check(MethodInvocationTree tree) { if (isEquals(tree.methodSelect()) && tree.arguments().size() == 1 && tree.arguments().get(0).is(Kind.STRING_LITERAL)) { LiteralTree stringLiteral = (LiteralTree) tree.arguments().get(0); reportIssue(stringLiteral, "Move the " + stringLiteral.value() + " string literal on the left side of this string comparison."); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { ExpressionTree arg = mit.arguments().get(0); if (isZeroIntLiteral(arg)) { reportIssue(arg, MESSAGE); } }
private void checkUrlContainsEmptyPassword(MethodInvocationTree mit) { ExpressionTree urlArgument = mit.arguments().get(URL_ARGUMENT); String url = ConstantUtils.resolveAsStringConstant(urlArgument); if (url != null && (urlContainsEmptyPassword(url, MYSQL_URL_PATTERN) || urlContainsEmptyPassword(url, ORACLE_URL_PATTERN) || EMPTY_PASSWORD_PATTERN.matcher(url).matches())) { reportIssue(mit, MESSAGE); } }
@Override public void visitMethodInvocation(MethodInvocationTree mit) { Arguments args = mit.arguments(); if (HASHTABLE_PUT.matches(mit) && "mail.smtp.ssl.checkserveridentity".equals(ConstantUtils.resolveAsStringConstant(args.get(0))) && isNotFalse(args.get(1))) { this.isSecured = true; } super.visitMethodInvocation(mit); } }
private boolean incompleteAssertion(MethodInvocationTree mit) { if (((FEST_LIKE_ASSERT_THAT.anyMatch(mit) && (mit.arguments().size() == 1)) || MOCKITO_VERIFY.matches(mit)) && !Boolean.TRUE.equals(chainedToAnyMethodButFestExclusions)) { context.reportIssue(this, mit.methodSelect(), "Complete the assertion."); return true; } return false; }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { ExpressionTree firstArg = mit.arguments().get(0); ExpressionTree defaultPropertyValue = JavaPropertiesHelper.retrievedPropertyDefaultValue(firstArg); if (defaultPropertyValue == null) { defaultPropertyValue = firstArg; } if (defaultPropertyValue.is(Tree.Kind.STRING_LITERAL)) { checkIssue(firstArg, (LiteralTree) defaultPropertyValue); } }
@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.METHOD)) { isInFinalizeMethod = isFinalizeMethodMember((MethodTree) tree); } else { MethodInvocationTree methodInvocationTree = (MethodInvocationTree) tree; IdentifierTree methodName = ExpressionUtils.methodName(methodInvocationTree); if (!isInFinalizeMethod && "finalize".equals(methodName.name()) && methodInvocationTree.arguments().isEmpty()) { reportIssue(methodName, "Remove this call to finalize()."); } } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { String driverClassName = ConstantUtils.resolveAsStringConstant(mit.arguments().get(0)); if (JDBC_4_DRIVERS.contains(driverClassName)) { reportIssue(ExpressionUtils.methodName(mit), "Remove this \"Class.forName()\", it is useless." + context.getJavaVersion().java6CompatibilityMessage()); } } }
private static boolean isGetPropertyWithDefaultValue(MethodInvocationTree mit) { Symbol symbol = mit.symbol(); if (symbol.isMethodSymbol() && symbol.owner().type().is("java.util.Properties")) { return "getProperty".equals(symbol.name()) && mit.arguments().size() == 2; } return false; } }
@Override protected void onMethodInvocationFound(MethodInvocationTree method) { if (isArgumentAppended(method) && typeIsByte(method.arguments().get(0))) { reportIssue(method.methodSelect(), "Use String.format( \"%02X\", ...) instead."); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Type symbolType = mit.arguments().get(0).symbolType(); if (!(symbolType.is("long") || symbolType.is("java.lang.Long"))) { reportIssue(ExpressionUtils.methodName(mit), "Remove this \"Double.longBitsToDouble\" call."); } } }
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 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 usesNullKey(Symbol symbol) { List<IdentifierTree> usages = symbol.usages(); for (IdentifierTree usage : usages) { if (usage.parent().is(Tree.Kind.MEMBER_SELECT) && usage.parent().parent().is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree mit = (MethodInvocationTree) usage.parent().parent(); if (mapPut.matches(mit) && mit.arguments().get(0).is(Tree.Kind.NULL_LITERAL)) { return true; } } } return false; }