@Override
 public void visit(final TypeParameter n, final A arg) {
   visitComment(n.getComment(), arg);
   if (n.getTypeBound() != null) {
     for (final ClassOrInterfaceType c : n.getTypeBound()) {
       c.accept(this, arg);
     }
   }
 }
 @Override
 public void visit(final ClassOrInterfaceDeclaration n, final A arg) {
   visitComment(n.getComment(), arg);
   visitAnnotations(n, arg);
   n.getNameExpr().accept(this, arg);
   for (final TypeParameter t : n.getTypeParameters()) {
     t.accept(this, arg);
   }
   for (final ClassOrInterfaceType c : n.getExtends()) {
     c.accept(this, arg);
   }
   for (final ClassOrInterfaceType c : n.getImplements()) {
     c.accept(this, arg);
   }
   for (final BodyDeclaration<?> member : n.getMembers()) {
     member.accept(this, arg);
   }
 }
 @Override
 public void visit(final EnumDeclaration n, final A arg) {
   visitComment(n.getComment(), arg);
   visitAnnotations(n, arg);
   n.getNameExpr().accept(this, arg);
   if (n.getImplements() != null) {
     for (final ClassOrInterfaceType c : n.getImplements()) {
       c.accept(this, arg);
     }
   }
   if (n.getEntries() != null) {
     for (final EnumConstantDeclaration e : n.getEntries()) {
       e.accept(this, arg);
     }
   }
   if (n.getMembers() != null) {
     for (final BodyDeclaration<?> member : n.getMembers()) {
       member.accept(this, arg);
     }
   }
 }