protected static boolean isNewArrayWithInitializers(ExpressionTree expression) { return expression.is(Tree.Kind.NEW_ARRAY) && ((NewArrayTree) expression).openBraceToken() != null; }
protected static boolean isNewArrayWithInitializers(ExpressionTree expression) { return expression.is(Tree.Kind.NEW_ARRAY) && ((NewArrayTree) expression).openBraceToken() != null; }
private static boolean hasEmptyInitializer(NewArrayTree newArrayTree) { return newArrayTree.openBraceToken() != null && newArrayTree.initializers().isEmpty(); }
private static boolean hasEmptyInitializer(NewArrayTree newArrayTree) { return newArrayTree.openBraceToken() != null && newArrayTree.initializers().isEmpty(); }
private static boolean hasConstantInitializer(VariableTree variableTree) { ExpressionTree init = variableTree.initializer(); if (init != null) { if(ExpressionUtils.skipParentheses(init).is(Tree.Kind.METHOD_REFERENCE)) { MethodReferenceTree methodRef = (MethodReferenceTree) ExpressionUtils.skipParentheses(init); if(isInstanceIdentifier(methodRef.expression())) { return false; } } boolean arrayWithInitializer = true; if (init.is(Tree.Kind.NEW_ARRAY)) { // exclude allocations : new int[6] but allow initialization new int[]{1,2}; NewArrayTree newArrayTree = (NewArrayTree) init; arrayWithInitializer = newArrayTree.dimensions().isEmpty() || newArrayTree.openBraceToken() != null; } return arrayWithInitializer && !containsChildrenOfKind((JavaTree) init, Tree.Kind.METHOD_INVOCATION, Tree.Kind.NEW_CLASS); } return false; }
private static boolean hasConstantInitializer(VariableTree variableTree) { ExpressionTree init = variableTree.initializer(); if (init != null) { if(ExpressionUtils.skipParentheses(init).is(Tree.Kind.METHOD_REFERENCE)) { MethodReferenceTree methodRef = (MethodReferenceTree) ExpressionUtils.skipParentheses(init); if(isInstanceIdentifier(methodRef.expression())) { return false; } } boolean arrayWithInitializer = true; if (init.is(Tree.Kind.NEW_ARRAY)) { // exclude allocations : new int[6] but allow initialization new int[]{1,2}; NewArrayTree newArrayTree = (NewArrayTree) init; arrayWithInitializer = newArrayTree.dimensions().isEmpty() || newArrayTree.openBraceToken() != null; } return arrayWithInitializer && !containsChildrenOfKind((JavaTree) init, Tree.Kind.METHOD_INVOCATION, Tree.Kind.NEW_CLASS); } return false; }
private void checkInvokedMethod(JavaSymbol.MethodJavaSymbol methodSymbol, @Nullable MethodJavaType methodType, ExpressionTree lastArg) { if (methodSymbol.isVarArgs() && lastArg.is(Tree.Kind.NEW_ARRAY)) { if (lastParamHasSameType(methodSymbol, methodType, lastArg.symbolType())) { String message = "Remove this array creation"; NewArrayTree newArrayTree = (NewArrayTree) lastArg; if (newArrayTree.openBraceToken() == null) { ExpressionTree expression = newArrayTree.dimensions().get(0).expression(); Integer literalValue = LiteralUtils.intLiteralValue(expression); if (literalValue == null || literalValue != 0 || isCallingOverload(methodSymbol, lastArg)) { return; } } else if (!newArrayTree.initializers().isEmpty()) { message += " and simply pass the elements"; } reportIssue(lastArg, message + "."); } else { String type = ((Type.ArrayType) getLastParameterType(methodSymbol.parameterTypes())).elementType().name(); reportIssue(lastArg, "Disambiguate this call by either casting as \"" + type + "\" or \"" + type + "[]\"."); } } }
private void checkInvokedMethod(JavaSymbol.MethodJavaSymbol methodSymbol, @Nullable MethodJavaType methodType, ExpressionTree lastArg) { if (methodSymbol.isVarArgs() && lastArg.is(Tree.Kind.NEW_ARRAY)) { if (lastParamHasSameType(methodSymbol, methodType, lastArg.symbolType())) { String message = "Remove this array creation"; NewArrayTree newArrayTree = (NewArrayTree) lastArg; if (newArrayTree.openBraceToken() == null) { ExpressionTree expression = newArrayTree.dimensions().get(0).expression(); Integer literalValue = LiteralUtils.intLiteralValue(expression); if (literalValue == null || literalValue != 0 || isCallingOverload(methodSymbol, lastArg)) { return; } } else if (!newArrayTree.initializers().isEmpty()) { message += " and simply pass the elements"; } reportIssue(lastArg, message + "."); } else { String type = ((Type.ArrayType) getLastParameterType(methodSymbol.parameterTypes())).elementType().name(); reportIssue(lastArg, "Disambiguate this call by either casting as \"" + type + "\" or \"" + type + "[]\"."); } } }