code: protected JCCatch catchClause() {
          int pos = token.pos;
          accept(CATCH);
          accept(LPAREN);
          JCModifiers mods = optFinal(Flags.PARAMETER);
          List<JCExpression> catchTypes = catchTypes();
          JCExpression paramType = catchTypes.size() > 1 ?
                  toP(F.at(catchTypes.head.getStartPosition()).TypeUnion(catchTypes)) :
                  catchTypes.head;
          JCVariableDecl formal = variableDeclaratorId(mods, paramType);
          accept(RPAREN);
          JCBlock body = block();
          return F.at(pos).Catch(formal, body);
      }
docs: CatchClause     = CATCH "(" FormalParameter ")" Block
  TODO: the "FormalParameter" is not correct, it uses the special "catchTypes" rule below.