@Override
 public Void visit(ObjectCreationExpr expr, AElement elem) {
   ClassOrInterfaceType type = expr.getType();
   AClass clazz = scene.classes.vivify(type.getName());
   Expression scope = expr.getScope();
   List<Type> typeArgs = expr.getTypeArgs();
   List<Expression> args = expr.getArgs();
   List<BodyDeclaration> decls = expr.getAnonymousClassBody();
   if (scope != null) {
     scope.accept(this, elem);
   }
   if (args != null) {
     for (Expression arg : args) {
       arg.accept(this, elem);
     }
   }
   if (typeArgs != null) {
     for (Type typeArg : typeArgs) {
       typeArg.accept(this, elem);
     }
   }
   type.accept(this, clazz);
   if (decls != null) {
     for (BodyDeclaration decl : decls) {
       decl.accept(this, clazz);
     }
   }
   return null;
 }
  @Override
  public void visit(ObjectCreationExpr n, Object arg) {
    if (n.getScope() != null) {
      n.getScope().accept(this, arg);
      printer.print(".");
    }

    printer.print("new ");

    printTypeArgs(n.getTypeArgs(), arg);
    n.getType().accept(this, arg);

    printArguments(n.getArgs(), arg);

    if (n.getAnonymousClassBody() != null) {
      printer.printLn(" {");
      printer.indent();
      printMembers(n.getAnonymousClassBody(), arg);
      printer.unindent();
      printer.print("}");
    }
  }