docs: void annotation( AnnotatedDescrBuilder<?> adb ) {
          AnnotationDescrBuilder<?> annotation = null;
  
          try {
              if (speculateFullAnnotation()) {
                  boolean buildState = exprParser.isBuildDescr();
                  exprParser.setBuildDescr(true);
                  exprParser.fullAnnotation(adb);
                  exprParser.setBuildDescr(buildState);
              } else {
  
                  // '@'
                  Token at = match(input,
                          DRL6Lexer.AT,
                          null,
                          null,
                          DroolsEditorType.SYMBOL);
                  if (state.failed)
                      return;
  
                  // identifier
                  String fqn = qualifiedIdentifier();
                  if (state.failed)
                      return;
  
                  if (state.backtracking == 0) {
                      annotation = adb.newAnnotation(fqn);
                      helper.setStart(annotation,
                              at);
                  }
  
                  try {
                      if (input.LA(1) == DRL6Lexer.LEFT_PAREN) {
                          String value = chunk(DRL6Lexer.LEFT_PAREN,
                                  DRL6Lexer.RIGHT_PAREN,
                                  -1).trim();
                          if (state.failed)
                              return;
                          if (state.backtracking == 0) {
                              annotation.value(value);
                          }
                      }
                  } finally {
                      if (state.backtracking == 0) {
                          helper.setEnd(annotation);
                      }
                  }
              }
  
          } catch (RecognitionException re) {
              reportError(re);
          }
      }