docs: protected Node record( final AnnotationTypeDeclaration annotationType,
                             final Node outputNode ) throws Exception {
          final String name = annotationType.getName().getFullyQualifiedName();
          final Node annotationTypeNode = outputNode.addNode(name, ClassFileSequencerLexicon.ANNOTATION_TYPE);
          annotationTypeNode.setProperty(ClassFileSequencerLexicon.NAME, name);
          annotationTypeNode.setProperty(ClassFileSequencerLexicon.VISIBILITY, getVisibility(annotationType.getModifiers()));
          annotationTypeNode.setProperty(ClassFileSequencerLexicon.SEQUENCED_DATE, this.context.getTimestamp());
  
          { // javadocs
              final Javadoc javadoc = annotationType.getJavadoc();
  
              if (javadoc != null) {
                  record(javadoc, annotationTypeNode);
              }
          }
  
          { // annotations
              @SuppressWarnings( "unchecked" )
              final List<IExtendedModifier> modifiers = annotationType.modifiers();
              recordAnnotations(modifiers, annotationTypeNode);
          }
  
          { // body
              @SuppressWarnings( "unchecked" )
              final List<BodyDeclaration> body = annotationType.bodyDeclarations();
  
              if ((body != null) && !body.isEmpty()) {
                  Node fieldsNode = null;
                  Node membersNode = null;
                  Node nestedTypesNode = null;
  
                  for (final BodyDeclaration declaration : body) {
                      if (declaration instanceof AnnotationTypeMemberDeclaration) {
                          if (membersNode == null) {
                              membersNode = annotationTypeNode.addNode(ClassFileSequencerLexicon.ANNOTATION_TYPE_MEMBERS,
                                                                       ClassFileSequencerLexicon.ANNOTATION_TYPE_MEMBERS);
                          }
  
                          record((AnnotationTypeMemberDeclaration)declaration, membersNode);
                      } else if (declaration instanceof FieldDeclaration) {
                          if (fieldsNode == null) {
                              fieldsNode = annotationTypeNode.addNode(ClassFileSequencerLexicon.FIELDS,
                                                                      ClassFileSequencerLexicon.FIELDS);
                          }
  
                          record((FieldDeclaration)declaration, fieldsNode);
                      } else if (declaration instanceof AbstractTypeDeclaration) {
                          if (nestedTypesNode == null) {
                              nestedTypesNode = annotationTypeNode.addNode(ClassFileSequencerLexicon.NESTED_TYPES,
                                                                           ClassFileSequencerLexicon.NESTED_TYPES);
                          }
  
                          if (declaration instanceof TypeDeclaration) {
                              record((TypeDeclaration)declaration, nestedTypesNode);
                          } else if (declaration instanceof EnumDeclaration) {
                              record((EnumDeclaration)declaration, nestedTypesNode);
                          } else if (declaration instanceof AnnotationTypeDeclaration) {
                              record((AnnotationTypeDeclaration)declaration, nestedTypesNode);
                          } else {
                              assert false;
                              LOGGER.error(JavaFileI18n.unhandledAnnotationTypeBodyDeclarationType,
                                           declaration.getClass().getName(),
                                           annotationType.getName());
                          }
                      } else {
                          assert false;
                          LOGGER.error(JavaFileI18n.unhandledAnnotationTypeBodyDeclarationType,
                                       declaration.getClass().getName(),
                                       annotationType.getName());
                      }
                  }
              }
          }
  
          recordSourceReference(annotationType, annotationTypeNode);
          return annotationTypeNode;
      }