예제 #1
0
  @Override
  public Void visitClass(ClassDefinition classDefinition) {
    // print annotations first
    for (AnnotationDefinition annotationDefinition : classDefinition.getAnnotations()) {
      visitAnnotation(classDefinition, annotationDefinition);
    }

    // print class declaration
    Line classDeclaration =
        line()
            .addAll(classDefinition.getAccess())
            .add("class")
            .add(classDefinition.getType().getJavaClassName());
    if (!classDefinition.getSuperClass().equals(type(Object.class))) {
      classDeclaration.add("extends").add(classDefinition.getSuperClass().getJavaClassName());
    }
    if (!classDefinition.getInterfaces().isEmpty()) {
      classDeclaration.add("implements");
      for (ParameterizedType interfaceType : classDefinition.getInterfaces()) {
        classDeclaration.add(interfaceType.getJavaClassName());
      }
    }
    classDeclaration.print();

    // print class body
    printLine("{");
    indentLevel++;

    // print fields
    for (FieldDefinition fieldDefinition : classDefinition.getFields()) {
      visitField(classDefinition, fieldDefinition);
    }

    // print methods
    for (MethodDefinition methodDefinition : classDefinition.getMethods()) {
      visitMethod(classDefinition, methodDefinition);
    }

    indentLevel--;
    printLine("}");
    printLine();
    return null;
  }