javacc@7.0.13.bcr.1 (#6089)

diff --git a/modules/javacc/7.0.13.bcr.1/MODULE.bazel b/modules/javacc/7.0.13.bcr.1/MODULE.bazel
new file mode 100644
index 0000000..d35242f
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/MODULE.bazel
@@ -0,0 +1,8 @@
+module(
+    name = "javacc",
+    version = "7.0.13.bcr.1",
+    bazel_compatibility = [">=7.2.1"],
+    compatibility_level = 1,
+)
+
+bazel_dep(name = "rules_java", version = "8.16.1")
diff --git a/modules/javacc/7.0.13.bcr.1/overlay/BUILD.bazel b/modules/javacc/7.0.13.bcr.1/overlay/BUILD.bazel
new file mode 100644
index 0000000..a3a03bd
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/overlay/BUILD.bazel
@@ -0,0 +1,254 @@
+load("@rules_java//java:java_binary.bzl", "java_binary")
+load("@rules_java//java:java_library.bzl", "java_library")
+load(":javacc_bootstrap.bzl", "javacc_bootstrap")
+
+JAVAC_OPTS = [
+    "-XepAllErrorsAsWarnings",
+    "-Xep:ComparisonOutOfRange:OFF",
+    "-Xep:ChainingConstructorIgnoresParameter:OFF",
+    "-Xlint:-dep-ann",
+]
+
+JAR_RESOURCES = glob(["src/main/resources/**/*"])
+
+JAVACC_PARSER_SRCS = glob([
+    "src/main/java/org/javacc/parser/**/*.java",
+    "src/main/java/org/javacc/utils/**/*.java",
+])
+
+JTREE_SRCS = glob([
+    "src/main/java/org/javacc/jjtree/**/*.java",
+])
+
+java_library(
+    name = "javacc_version",
+    srcs = ["src/main/java/org/javacc/Version.java"],
+)
+
+java_library(
+    name = "javacc_parser",
+    srcs = JAVACC_PARSER_SRCS + [
+        ":javacc_stage2_ConditionParser",
+        ":javacc_stage2_JavaCC",
+    ],
+    javacopts = JAVAC_OPTS,
+    deps = [":javacc_version"],
+)
+
+java_binary(
+    name = "javacc",
+    srcs = ["src/main/java/javacc.java"],
+    javacopts = JAVAC_OPTS,
+    main_class = "javacc",
+    resources = JAR_RESOURCES,
+    visibility = ["//visibility:public"],
+    deps = [":javacc_parser"],
+)
+
+java_binary(
+    name = "jjdoc",
+    srcs = ["src/main/java/jjdoc.java"] + glob([
+        "src/main/java/org/javacc/jjdoc/**/*.java",
+    ]),
+    javacopts = JAVAC_OPTS,
+    main_class = "jjdoc",
+    visibility = ["//visibility:public"],
+    deps = [":javacc_parser"],
+)
+
+java_binary(
+    name = "jjtree",
+    srcs = JTREE_SRCS + [
+        "src/main/java/jjtree.java",
+        ":javacc_stage2_JJTree",
+        ":jtree_stage2_JJTree_java",
+    ],
+    javacopts = JAVAC_OPTS,
+    main_class = "jjtree",
+    resources = JAR_RESOURCES,
+    visibility = ["//visibility:public"],
+    deps = [
+        ":javacc_parser",
+        ":javacc_version",
+    ],
+)
+
+# javacc bootstrap {{{
+
+JAVACC_JJ_OUTS = [
+    "JavaCCParser.java",
+    "JavaCCParserConstants.java",
+    "JavaCCParserTokenManager.java",
+    "JavaCharStream.java",
+    "ParseException.java",
+    "TokenMgrError.java",
+]
+
+CONDITION_PARSER_JJ_OUTS = [
+    "ConditionParser.java",
+    "ConditionParserConstants.java",
+    "ConditionParserTokenManager.java",
+    "JavaCharStream.java",
+    "ParseException.java",
+    "Token.java",
+    "TokenMgrError.java",
+]
+
+javacc_bootstrap(
+    name = "javacc_stage1_JavaCC",
+    src = "src/main/javacc/JavaCC.jj",
+    outs = JAVACC_JJ_OUTS,
+    javacc = "//bootstrap:javacc_stage1",
+)
+
+javacc_bootstrap(
+    name = "javacc_stage1_ConditionParser",
+    src = "src/main/javacc/ConditionParser.jj",
+    outs = CONDITION_PARSER_JJ_OUTS,
+    javacc = "//bootstrap:javacc_stage1",
+)
+
+javacc_bootstrap(
+    name = "javacc_stage2_JavaCC",
+    src = "src/main/javacc/JavaCC.jj",
+    outs = JAVACC_JJ_OUTS,
+    javacc = ":javacc_stage2",
+)
+
+javacc_bootstrap(
+    name = "javacc_stage2_ConditionParser",
+    src = "src/main/javacc/ConditionParser.jj",
+    outs = CONDITION_PARSER_JJ_OUTS,
+    javacc = ":javacc_stage2",
+)
+
+java_binary(
+    name = "javacc_stage2",
+    srcs = JAVACC_PARSER_SRCS + [
+        "src/main/java/javacc.java",
+        ":javacc_stage1_ConditionParser",
+        ":javacc_stage1_JavaCC",
+    ],
+    javacopts = JAVAC_OPTS,
+    main_class = "javacc",
+    resources = JAR_RESOURCES,
+    deps = [":javacc_version"],
+)
+
+# }}}
+
+# jtree bootstrap {{{
+
+JJTREE_JJ_OUTS = [
+    "JavaCharStream.java",
+    "JJTreeParserConstants.java",
+    "JJTreeParser.java",
+    "JJTreeParserTokenManager.java",
+    "ParseException.java",
+    "TokenMgrError.java",
+]
+
+JJTREE_JJT_OUTS = [
+    "ASTBNFAssignment.java",
+    "ASTBNFChoice.java",
+    "ASTBNFLookahead.java",
+    "ASTBNFNonTerminal.java",
+    "ASTBNFOneOrMore.java",
+    "ASTBNFParenthesized.java",
+    "ASTBNFSequence.java",
+    "ASTBNFTryBlock.java",
+    "ASTBNFZeroOrMore.java",
+    "ASTBNFZeroOrOne.java",
+    "ASTCharDescriptor.java",
+    "ASTPrimaryExpression.java",
+    "ASTProductions.java",
+    "ASTRECharList.java",
+    "ASTREChoice.java",
+    "ASTREEOF.java",
+    "ASTRE.java",
+    "ASTRENamed.java",
+    "ASTREOneOrMore.java",
+    "ASTREParenthesized.java",
+    "ASTREReference.java",
+    "ASTRESequence.java",
+    "ASTRESpec.java",
+    "ASTREStringLiteral.java",
+    "ASTREZeroOrMore.java",
+    "ASTREZeroOrOne.java",
+    "ASTRRepetitionRange.java",
+    "ASTTokenDecls.java",
+    "JJTJJTreeParserState.java",
+    "JJTreeParserTreeConstants.java",
+    "Node.java",
+    "SimpleNode.java",
+]
+
+javacc_bootstrap(
+    name = "jtree_stage1_JJTree",
+    src = "src/main/jjtree/JJTree.jjt",
+    outs = ["JJTree.jj"] + JJTREE_JJT_OUTS,
+    javacc = "//bootstrap:jjtree_stage1",
+)
+
+filegroup(
+    name = "jtree_stage1_JJTree_java",
+    srcs = [":jtree_stage1_JJTree"],
+    output_group = "java_files",
+)
+
+filegroup(
+    name = "jtree_stage1_JJTree_jj",
+    srcs = [":jtree_stage1_JJTree"],
+    output_group = "jj_files",
+)
+
+javacc_bootstrap(
+    name = "javacc_stage1_JJTree",
+    src = ":jtree_stage1_JJTree_jj",
+    outs = JJTREE_JJ_OUTS,
+    javacc = ":javacc",
+)
+
+java_binary(
+    name = "jjtree_stage2",
+    srcs = JTREE_SRCS + [
+        "src/main/java/jjtree.java",
+        ":javacc_stage1_JJTree",
+        ":jtree_stage1_JJTree_java",
+    ],
+    javacopts = JAVAC_OPTS,
+    main_class = "jjtree",
+    resources = JAR_RESOURCES,
+    deps = [
+        ":javacc_parser",
+        ":javacc_version",
+    ],
+)
+
+javacc_bootstrap(
+    name = "jtree_stage2_JJTree",
+    src = "src/main/jjtree/JJTree.jjt",
+    outs = ["JJTree.jj"] + JJTREE_JJT_OUTS,
+    javacc = ":jjtree_stage2",
+)
+
+filegroup(
+    name = "jtree_stage2_JJTree_java",
+    srcs = [":jtree_stage2_JJTree"],
+    output_group = "java_files",
+)
+
+filegroup(
+    name = "jtree_stage2_JJTree_jj",
+    srcs = [":jtree_stage2_JJTree"],
+    output_group = "jj_files",
+)
+
+javacc_bootstrap(
+    name = "javacc_stage2_JJTree",
+    src = ":jtree_stage2_JJTree_jj",
+    outs = JJTREE_JJ_OUTS,
+    javacc = ":javacc",
+)
+
+# }}}
diff --git a/modules/javacc/7.0.13.bcr.1/overlay/MODULE.bazel b/modules/javacc/7.0.13.bcr.1/overlay/MODULE.bazel
new file mode 120000
index 0000000..9b599e3
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/overlay/MODULE.bazel
@@ -0,0 +1 @@
+../MODULE.bazel
\ No newline at end of file
diff --git a/modules/javacc/7.0.13.bcr.1/overlay/bootstrap/BUILD.bazel b/modules/javacc/7.0.13.bcr.1/overlay/bootstrap/BUILD.bazel
new file mode 100644
index 0000000..f8e225b
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/overlay/bootstrap/BUILD.bazel
@@ -0,0 +1,21 @@
+load("@rules_java//java:java_binary.bzl", "java_binary")
+load("@rules_java//java:java_import.bzl", "java_import")
+
+java_import(
+    name = "javacc_jar",
+    jars = ["javacc.jar"],
+)
+
+java_binary(
+    name = "javacc_stage1",
+    main_class = "javacc",
+    visibility = ["//:__subpackages__"],
+    runtime_deps = [":javacc_jar"],
+)
+
+java_binary(
+    name = "jjtree_stage1",
+    main_class = "jjtree",
+    visibility = ["//:__subpackages__"],
+    runtime_deps = [":javacc_jar"],
+)
diff --git a/modules/javacc/7.0.13.bcr.1/overlay/javacc_bootstrap.bzl b/modules/javacc/7.0.13.bcr.1/overlay/javacc_bootstrap.bzl
new file mode 100644
index 0000000..9327842
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/overlay/javacc_bootstrap.bzl
@@ -0,0 +1,42 @@
+def _javacc_bootstrap(ctx):
+    outs = []
+    java_outs = []
+    jj_outs = []
+    for out_basename in ctx.attr.outs:
+        out = ctx.actions.declare_file(ctx.attr.name + "/" + out_basename)
+        outs.append(out)
+        if out_basename.endswith(".java"):
+            java_outs.append(out)
+        if out_basename.endswith(".jj"):
+            jj_outs.append(out)
+    ctx.actions.run(
+        outputs = outs,
+        inputs = ctx.files.src,
+        executable = ctx.executable.javacc,
+        arguments = [
+            "-OUTPUT_DIRECTORY:" + outs[0].dirname,
+            ctx.file.src.path,
+        ],
+        mnemonic = "JavaccBootstrap",
+    )
+    return [
+        DefaultInfo(files = depset(outs)),
+        OutputGroupInfo(
+            jj_files = depset(jj_outs),
+            java_files = depset(java_outs),
+        ),
+    ]
+
+javacc_bootstrap = rule(
+    implementation = _javacc_bootstrap,
+    attrs = {
+        "javacc": attr.label(
+            executable = True,
+            cfg = "exec",
+        ),
+        "src": attr.label(
+            allow_single_file = True,
+        ),
+        "outs": attr.string_list(),
+    },
+)
diff --git a/modules/javacc/7.0.13.bcr.1/presubmit.yml b/modules/javacc/7.0.13.bcr.1/presubmit.yml
new file mode 100644
index 0000000..b837825
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/presubmit.yml
@@ -0,0 +1,18 @@
+matrix:
+  platform:
+  - debian11
+  - ubuntu2204
+  - macos
+  - macos_arm64
+  - windows
+  bazel:
+  - 8.x
+tasks:
+  verify_targets:
+    name: Verify build targets
+    platform: ${{ platform }}
+    bazel: ${{ bazel }}
+    build_targets:
+    - '@javacc//:javacc'
+    - '@javacc//:jjdoc'
+    - '@javacc//:jjtree'
diff --git a/modules/javacc/7.0.13.bcr.1/source.json b/modules/javacc/7.0.13.bcr.1/source.json
new file mode 100644
index 0000000..ae2c5cd
--- /dev/null
+++ b/modules/javacc/7.0.13.bcr.1/source.json
@@ -0,0 +1,11 @@
+{
+    "url": "https://github.com/javacc/javacc/archive/refs/tags/javacc-7.0.13.tar.gz",
+    "integrity": "sha256-0b/rtMqSYcXDsWsAKAsyeKQbGTyoUD8ph/ct5FO/mcY=",
+    "strip_prefix": "javacc-javacc-7.0.13",
+    "overlay": {
+        "BUILD.bazel": "sha256-qy7XIZTiovJzlHmFTDjGamlS+xvV2yplwHP69OLuCdg=",
+        "MODULE.bazel": "sha256-5E7wuRDVz7TZJbCt+SwQDEQNkn/96vIjhHVUCDHUdpE=",
+        "bootstrap/BUILD.bazel": "sha256-GT4+hUnNv4d6LZrtTX3z/w9VDeNQFT34qnIPMS5OyD0=",
+        "javacc_bootstrap.bzl": "sha256-flnrJHZLXsw2fySqzLzKaZPhPpjI+Cem5x3gmqOZu0U="
+    }
+}
diff --git a/modules/javacc/metadata.json b/modules/javacc/metadata.json
index fc9c570..e641663 100644
--- a/modules/javacc/metadata.json
+++ b/modules/javacc/metadata.json
@@ -4,15 +4,16 @@
         {
             "email": "john@john-millikin.com",
             "github": "jmillikin",
-            "name": "John Millikin",
-            "github_user_id": 646128
+            "github_user_id": 646128,
+            "name": "John Millikin"
         }
     ],
     "repository": [
         "github:javacc/javacc"
     ],
     "versions": [
-        "7.0.13"
+        "7.0.13",
+        "7.0.13.bcr.1"
     ],
     "yanked_versions": {}
 }