final public ModuleCapability ModuleCapability(Recovery next) throws ParseException {
    NodeList capabilitiesList;
    Token support_t;
    ModuleIdentifier module_id;
    Token includes_t;
    NodeList list;
    NodeList variation_list = new NodeList();
    VariationPart variation;
    support_t = jj_consume_token(SUPPORTS_T);
    try {
      module_id = ModuleIdentifier();
    } catch (ParseException e) {
        handleError(e, INCLUDES_T, "<module identifier>");
        module_id = new ModuleIdentifier(makeNodeToken(TYPE_IDENTIFIER_T));
    }
    try {
      includes_t = jj_consume_token(INCLUDES_T);
    } catch (ParseException e) {
        handleError(e, LEFT_BRACE_T, "'INCLUDES'");
    }
    list = BracedValueList(next);
    label_9:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case VARIATION_T:
        ;
        break;
      default:
        jj_la1[33] = jj_gen;
        break label_9;
      }
      variation = VariationPart();
          variation_list.addNode(variation);
    }
      variation_list.nodes.trimToSize();
      {if (true) return new ModuleCapability(module_id,
                            list,
                            variation_list);}
    throw new Error("Missing return statement in function");
  }