@Override public Description matchNewClass(NewClassTree tree, VisitorState state) { // 1. Check any enclosing expression like a dereference JCExpression receiverTree = (JCExpression) tree.getEnclosingExpression(); if (receiverTree != null) { Description result = checkExpression( receiverTree, state, qual -> String.format( "Outer object %s for %s is %s null", receiverTree, tree.getIdentifier(), qual)); if (result != null) { return result; } } // 2. Check call arguments like a method call return checkCallArguments(tree.getArguments(), getSymbol(tree), state); }
@Override public UNewClass visitNewClass(NewClassTree tree, Void v) { return UNewClass.create( tree.getEnclosingExpression() == null ? null : template(tree.getEnclosingExpression()), templateTypeExpressions(tree.getTypeArguments()), template(tree.getIdentifier()), templateExpressions(tree.getArguments()), (tree.getClassBody() == null) ? null : visitClass(tree.getClassBody(), null)); }
@Override public Void visitNewClass(NewClassTree tree, HeldLockSet locks) { scan(tree.getEnclosingExpression(), locks); scan(tree.getIdentifier(), locks); scan(tree.getTypeArguments(), locks); scan(tree.getArguments(), locks); // Don't descend into bodies of anonymous class declarations; // their method declarations will be analyzed separately. return null; }
@Override public Boolean visitNewClass(NewClassTree node, Void unused) { Boolean r = scan(node.getEnclosingExpression(), null); r = scanAndReduce(node.getIdentifier(), r); r = scanAndReduce(node.getTypeArguments(), r); r = scanAndReduce(node.getArguments(), r); // don't descend into class body, if it exists return r; }
@Override public Choice<State<JCNewClass>> visitNewClass(final NewClassTree node, State<?> state) { if (node.getEnclosingExpression() != null || (node.getTypeArguments() != null && !node.getTypeArguments().isEmpty()) || node.getClassBody() != null) { return Choice.none(); } return chooseSubtrees( state, s -> unifyExpression(node.getIdentifier(), s), s -> unifyExpressions(node.getArguments(), s), (ident, args) -> maker().NewClass(null, null, ident, args, null)); }
@Override @Nullable public Choice<Unifier> visitNewClass(NewClassTree newClass, @Nullable Unifier unifier) { return unifyNullable(unifier, getEnclosingExpression(), newClass.getEnclosingExpression()) .thenChoose(unifications(getTypeArguments(), newClass.getTypeArguments())) .thenChoose(unifications(getIdentifier(), newClass.getIdentifier())) .thenChoose(unifications(getClassBody(), newClass.getClassBody())) .thenChoose(unifications(getArguments(), newClass.getArguments())); }
public List<Tree> visitNewClass(NewClassTree node, ExpressionScanner.ExpressionsInfo p) { List<Tree> result = scan(node.getEnclosingExpression(), node.getIdentifier(), p); result = reduce(result, scan(node.getArguments(), p)); result = reduce(result, scan(node.getClassBody(), p)); if (result == null) { result = new ArrayList(); } result.add(node); return result; }
@Override public List<Tree> visitNewClass(NewClassTree node, ExpressionScanner.ExpressionsInfo p) { List<Tree> result = scan(node.getEnclosingExpression(), node.getIdentifier(), p); result = reduce(result, scan(node.getArguments(), p)); result = reduce(result, scan(node.getClassBody(), p)); if (result == null) { result = new ArrayList<Tree>(); } result.add(node); return result; }
@Override public JExpression visitNewClass(NewClassTree nt, Void __) { // TODO: outer class if (nt.getEnclosingExpression()!=null) throw new UnsupportedOperationException(); return $b.invoke("new_").tap(inv -> { inv.arg(loc(nt)); inv.arg(cpsTypeTranslation(t(((JCTree) nt).type))); nt.getArguments().forEach( et -> inv.arg(visit(et)) ); }); }
@Override public UNewClass visitNewClass(NewClassTree tree, Void v) { return UNewClass.create( tree.getEnclosingExpression() == null ? null : template(tree.getEnclosingExpression()), templateTypeExpressions(tree.getTypeArguments()), template(tree.getIdentifier()), templateExpressions(tree.getArguments()), (tree.getClassBody() == null) ? null : visitClass(tree.getClassBody(), null)); }
private NewClassTree modifyNewClassArgument(NewClassTree newClass, int index, ExpressionTree argument, Operation op) { NewClassTree copy = NewClass( newClass.getEnclosingExpression(), (List<ExpressionTree>) newClass.getTypeArguments(), newClass.getIdentifier(), c(newClass.getArguments(), index, argument, op), newClass.getClassBody() ); return copy; }
private NewClassTree modifyNewClassTypeArgument(NewClassTree newClass, int index, ExpressionTree typeArgument, Operation op) { NewClassTree copy = NewClass( newClass.getEnclosingExpression(), c((List<ExpressionTree>) newClass.getTypeArguments(), index, typeArgument, op), newClass.getIdentifier(), newClass.getArguments(), newClass.getClassBody() ); return copy; }
@Override public Void visitNewClass(NewClassTree tree, HeldLockSet locks) { scan(tree.getEnclosingExpression(), locks); scan(tree.getIdentifier(), locks); scan(tree.getTypeArguments(), locks); scan(tree.getArguments(), locks); // Don't descend into bodies of anonymous class declarations; // their method declarations will be analyzed separately. return null; }
@Override public Boolean visitNewClass(NewClassTree node, Void unused) { Boolean r = scan(node.getEnclosingExpression(), null); r = scanAndReduce(node.getIdentifier(), r); r = scanAndReduce(node.getTypeArguments(), r); r = scanAndReduce(node.getArguments(), r); // don't descend into class body, if it exists return r; }
public R visitNewClass(NewClassTree node, P p) { R r = scan(node.getEnclosingExpression(), p); r = scanAndReduce(node.getIdentifier(), p, r); r = scanAndReduce(node.getTypeArguments(), p, r); r = scanAndReduce(node.getArguments(), p, r); r = scanAndReduce(node.getClassBody(), p, r); return r; }
public R visitNewClass(NewClassTree node, P p) { R r = scan(node.getEnclosingExpression(), p); r = scanAndReduce(node.getIdentifier(), p, r); r = scanAndReduce(node.getTypeArguments(), p, r); r = scanAndReduce(node.getArguments(), p, r); r = scanAndReduce(node.getClassBody(), p, r); return r; }
public R visitNewClass(NewClassTree node, P p) { R r = scan(node.getEnclosingExpression(), p); r = scanAndReduce(node.getIdentifier(), p, r); r = scanAndReduce(node.getTypeArguments(), p, r); r = scanAndReduce(node.getArguments(), p, r); r = scanAndReduce(node.getClassBody(), p, r); return r; }
public R visitNewClass(NewClassTree node, P p) { R r = scan(node.getEnclosingExpression(), p); r = scanAndReduce(node.getIdentifier(), p, r); r = scanAndReduce(node.getTypeArguments(), p, r); r = scanAndReduce(node.getArguments(), p, r); r = scanAndReduce(node.getClassBody(), p, r); return r; }
@Override @Nullable public Choice<Unifier> visitNewClass(NewClassTree newClass, @Nullable Unifier unifier) { return unifyNullable(unifier, getEnclosingExpression(), newClass.getEnclosingExpression()) .thenChoose(unifications(getTypeArguments(), newClass.getTypeArguments())) .thenChoose(unifications(getIdentifier(), newClass.getIdentifier())) .thenChoose(unifications(getClassBody(), newClass.getClassBody())) .thenChoose(unifications(getArguments(), newClass.getArguments())); }
@Override public Tree visitNewClass(NewClassTree tree, Void p) { NewClassTree n = make.NewClass((ExpressionTree)tree.getEnclosingExpression(), (List<? extends ExpressionTree>)tree.getTypeArguments(), tree.getIdentifier(), tree.getArguments(), tree.getClassBody()); model.setElement(n, model.getElement(tree)); model.setType(n, model.getType(tree)); comments.copyComments(tree, n); model.setPos(n, model.getPos(tree)); return n; }