private void buildNewClass(NewClassTree tree) { currentBlock.elements.add(tree); ExpressionTree enclosingExpression = tree.enclosingExpression(); if (enclosingExpression != null) { build(enclosingExpression); } build(Lists.reverse(tree.arguments())); }
public static String getclassName(NewClassTree newClasstree) { if (newClasstree.identifier().is(Tree.Kind.MEMBER_SELECT)) { return ((MemberSelectExpressionTree) newClasstree.identifier()).identifier().name(); } else if (newClasstree.identifier().is(Tree.Kind.IDENTIFIER)) { return ((IdentifierTree) newClasstree.identifier()).name(); } return null; }
private static Symbol.TypeSymbol wrapperClassSymbol(NewClassTree newClassTree) { Symbol.TypeSymbol classSymbol = newClassTree.symbolType().symbol(); if (PRIMITIVE_TYPES_BY_WRAPPER.containsKey(newClassTree.symbolType().fullyQualifiedName()) && !newClassTree.arguments().isEmpty()) { return classSymbol; } return null; }
@Test public void getLine() { CompilationUnitTree tree = createTree("class A {\n" + "A a = new A() {};" + "\n}"); ClassTree classTree = (ClassTree) tree.types().get(0); assertThat(((JavaTree) classTree).getLine()).isEqualTo(1); // get line of anonymous class NewClassTree newClassTree = (NewClassTree) ((VariableTree) classTree.members().get(0)).initializer(); assertThat(((JavaTree) newClassTree.classBody()).getLine()).isEqualTo(2); }
@Override public void visitNode(Tree tree) { NewClassTree newClassTree = (NewClassTree) tree; TypeTree newTypeTree = newClassTree.identifier(); if (newClassTree.classBody() == null && isParameterizedType(newTypeTree)) { TypeTree type = getTypeFromExpression(tree.parent()); if (type != null && isParameterizedType(type)) { reportIssue( ((ParameterizedTypeTree) newTypeTree).typeArguments(), "Replace the type specification in this constructor call with the diamond operator (\"<>\")." + JavaVersionHelper.java7CompatibilityMessage(context.getJavaVersion())); } } }
@Override public void visitNewClass(NewClassTree tree) { if (TARGETED_CLASS.contains(getclassName(tree)) && tree.arguments().size() == 1) { ExpressionTree argument = tree.arguments().get(0); if (argument.is(Tree.Kind.CHAR_LITERAL)) { String character = ((LiteralTree) argument).value(); context.reportIssue( this, argument, "Replace the constructor character parameter " + character + " with string parameter " + character.replace("'", "\"") + "."); } } }
private void checkForBoxing(ExpressionTree expression) { if (expression.is(Tree.Kind.NEW_CLASS)) { NewClassTree newClassTree = (NewClassTree) expression; Symbol.TypeSymbol classSymbol = wrapperClassSymbol(newClassTree); if (classSymbol != null) { ExpressionTree boxingArg = newClassTree.arguments().get(0); if (boxingArg.symbolType().isPrimitive()) { addBoxingIssue(newClassTree, classSymbol, boxingArg); } } } else if (expression.is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree methodInvocationTree = (MethodInvocationTree) expression; if (isValueOfInvocation(methodInvocationTree)) { ExpressionTree boxingArg = methodInvocationTree.arguments().get(0); addBoxingIssue(expression, methodInvocationTree.symbol().owner(), boxingArg); } } }
@Override public void visitNewClass(NewClassTree syntaxNode) { final List<SymbolicValue> arguments = programState.peekValues(syntaxNode.arguments().size()); if (isOpeningResource(syntaxNode)) { Iterator<SymbolicValue> iterator = arguments.iterator(); for (ExpressionTree argument : syntaxNode.arguments()) { if (!iterator.hasNext()) { throw new IllegalStateException( "Mismatch between declared constructor arguments and argument values!"); } final Type type = argument.symbolType(); final SymbolicValue value = iterator.next(); if (isCloseable(type)) { constraintManager.setValueFactory(new WrappedValueFactory(value)); break; } } } else { closeArguments(syntaxNode.arguments(), 0); } }
@Override public void visitNode(Tree tree) { if (hasSemantic()) { if (tree.is(Tree.Kind.METHOD_INVOCATION)) { visitMethodInvocationTree((MethodInvocationTree) tree); } else if (tree.is(Tree.Kind.VARIABLE)) { VariableTree variableTree = (VariableTree) tree; ExpressionTree initializer = variableTree.initializer(); if (initializer != null) { checkExpression(initializer, variableTree.type().symbolType()); } } else if (tree.is(Tree.Kind.ASSIGNMENT)) { AssignmentExpressionTree assignmentTree = (AssignmentExpressionTree) tree; checkExpression(assignmentTree.expression(), assignmentTree.symbolType()); } else { NewClassTree newClassTree = (NewClassTree) tree; Symbol.TypeSymbol classSymbol = wrapperClassSymbol(newClassTree); if (classSymbol != null) { checkForUnboxing(newClassTree.arguments().get(0)); } } } }
private static boolean isOpeningResource(NewClassTree syntaxNode) { if (isWithinTryHeader(syntaxNode)) { return false; } return needsClosing(syntaxNode.symbolType()); }
@Override public void visitNewClass(NewClassTree tree) { super.visitNewClass(tree); checkSymbol(tree.symbolType().symbol()); }