Shared Bazel machinery for generating a second servlet-API flavour of a Java module from one canonical source tree, by rewriting only the servlet (and Jetty EE) package prefixes while preserving Java package names and source line numbers.
It is self-contained: the rewrite is a plain sed package-prefix substitution, so it pulls in no external dependency.
The servlet/Jetty package mapping is universal, so it is baked into the rule. Consumers carry no renames data — they select only the direction:
direction | Rewrites | Used by |
|---|---|---|
to_javax | jakarta.servlet -> javax.servlet, Jetty ee10 -> ee8 | JGit .ee8 bridge (jakarta-canonical) |
to_jakarta | javax.servlet -> jakarta.servlet, Jetty ee8 servlet/security -> ee10 servlet/security | Gitiles .ee10 bridge (javax-canonical) |
If a consumer ever needs a rename outside this universal set, add an optional extra_renames attribute (or reference a .properties hosted here) — not needed today.
servlet_transform.bzl — transform_srcjar(name, sources, src_prefix, direction) rule producing a srcjar with the renames applied.junit_tests macro from junit.bzl via its optional suite_srcs parameter: pass the transformed test .srcjar as srcs (compiled) and the canonical .java test files as suite_srcs (scanned for the @Suite.SuiteClasses names). This works because the transform preserves package and class names, so the canonical files yield exactly the classes inside the srcjar — no separate junit macro is needed.generated_srcs_test.sh — derivation / line-count / residue checker. The residue checks are caller-supplied (--forbid, --require, --require-if-source) so it works in either direction.load("@com_googlesource_gerrit_bazlets//tools:servlet_transform.bzl", "transform_srcjar") load("@com_googlesource_gerrit_bazlets//tools:junit.bzl", "junit_tests") # Generate the flavour srcjar. transform_srcjar( name = "jgit-servlet-ee8-srcs", direction = "to_javax", sources = ["//org.eclipse.jgit.http.server:srcs"], src_prefix = "org.eclipse.jgit.http.server/src/", ) # Run the generated tests: compile the transformed srcjar, but derive the # suite class names from the canonical test files via suite_srcs. junit_tests( name = "http", srcs = [":http-test-ee8-srcs"], # transformed test srcjar (compiled) suite_srcs = ["//org.eclipse.jgit.http.test:test-srcs"], # canonical .java deps = ["..."], ) sh_test( name = "generated_srcs_test", srcs = ["@com_googlesource_gerrit_bazlets//tools:generated_srcs_test.sh"], args = [ "--forbid", "jakarta\\.servlet", "--require", "javax\\.servlet", "--module", "org.eclipse.jgit.http.server/src/", "$(location :jgit-servlet-ee8-srcs)", "$(locations //org.eclipse.jgit.http.server:srcs)", ], data = [":jgit-servlet-ee8-srcs", "//org.eclipse.jgit.http.server:srcs"], )
Each repo keeps only its own test target wiring; no renames data is duplicated.