@Override
  public void visit(MethodDeclaration n, Object arg) {
    printJavadoc(n.getJavaDoc(), arg);
    printMemberAnnotations(n.getAnnotations(), arg);
    printModifiers(n.getModifiers());

    printTypeParameters(n.getTypeParameters(), arg);
    if (n.getTypeParameters() != null) {
      printer.print(" ");
    }

    n.getType().accept(this, arg);
    printer.print(" ");
    printer.print(n.getName());

    printer.print("(");
    if (n.getParameters() != null) {
      for (Iterator<Parameter> i = n.getParameters().iterator(); i.hasNext(); ) {
        Parameter p = i.next();
        p.accept(this, arg);
        if (i.hasNext()) {
          printer.print(", ");
        }
      }
    }
    printer.print(")");

    for (int i = 0; i < n.getArrayCount(); i++) {
      printer.print("[]");
    }

    printAnnotations(n.getReceiverAnnotations(), arg, true);

    if (n.getThrows() != null) {
      printer.print(" throws ");
      for (Iterator<NameExpr> i = n.getThrows().iterator(); i.hasNext(); ) {
        NameExpr name = i.next();
        name.accept(this, arg);
        if (i.hasNext()) {
          printer.print(", ");
        }
      }
    }
    if (n.getBody() == null) {
      printer.print(";");
    } else {
      printer.print(" ");
      n.getBody().accept(this, arg);
    }
  }
 @Override
 public void visit(NameExpr n, Object arg) {
   printer.print(n.getName());
 }