code: private JCExpression bracketsOpt(JCExpression t,
              List<JCAnnotation> annotations) {
          List<JCAnnotation> nextLevelAnnotations = typeAnnotationsOpt();
  
          if (token.kind == LBRACKET) {
              int pos = token.pos;
              nextToken();
              t = bracketsOptCont(t, pos, nextLevelAnnotations);
          } else if (!nextLevelAnnotations.isEmpty()) {
              if (permitTypeAnnotationsPushBack) {
                  this.typeAnnotationsPushedBack = nextLevelAnnotations;
              } else {
                  return illegal(nextLevelAnnotations.head.pos);
              }
          }
  
          if (!annotations.isEmpty()) {
              t = toP(F.at(token.pos).AnnotatedType(annotations, t));
          }
          return t;
      }
docs: BracketsOpt = { [Annotations] "[" "]" }*
  
  <p>
  
  <code>annotations</code> is the list of annotations targeting
  the expression <code>t</code>.