Add --system flag to J2ObjcAspect.

RELNOTES: None
PiperOrigin-RevId: 242013414
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 7c097fd..dc08057 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -184,6 +184,12 @@
                     Label.parseAbsoluteUnchecked(
                         toolsRepository + "//third_party/java/j2objc:jre_emul.jar")))
         .add(
+            attr("$jre_emul_module", LABEL)
+                .cfg(HostTransition.createFactory())
+                .value(
+                    Label.parseAbsoluteUnchecked(
+                        toolsRepository + "//third_party/java/j2objc:jre_emul_module")))
+        .add(
             attr(":dead_code_report", LABEL)
                 .cfg(HostTransition.createFactory())
                 .value(DEAD_CODE_REPORT))
@@ -523,6 +529,16 @@
     Artifact bootclasspathJar = ruleContext.getPrerequisiteArtifact("$jre_emul_jar", Mode.HOST);
     argBuilder.addFormatted("-Xbootclasspath:%s", bootclasspathJar);
 
+    // A valid Java system module contains 3 files. The top directory contains a file "release".
+    ImmutableList<Artifact> moduleFiles =
+        ruleContext.getPrerequisiteArtifacts("$jre_emul_module", Mode.HOST).list();
+    for (Artifact a : moduleFiles) {
+      if (a.getFilename().equals("release")) {
+        argBuilder.add("--system", a.getDirname());
+        break;
+      }
+    }
+
     Artifact deadCodeReport = ruleContext.getPrerequisiteArtifact(":dead_code_report", Mode.HOST);
     if (deadCodeReport != null) {
       argBuilder.addExecPath("--dead-code-report", deadCodeReport);
@@ -544,6 +560,7 @@
             .addInput(ruleContext.getPrerequisiteArtifact("$j2objc_wrapper", Mode.HOST))
             .addInput(j2ObjcDeployJar)
             .addInput(bootclasspathJar)
+            .addInputs(moduleFiles)
             .addInputs(sources)
             .addInputs(sourceJars)
             .addTransitiveInputs(compileTimeJars)
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java
index 54bb248..76370f1 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java
@@ -26,6 +26,8 @@
    */
   public static void setup(MockToolsConfig config) throws IOException {
     config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/jre_emul.jar");
+    config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/mod/release");
+    config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/mod/lib/mods");
     config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/jre.h");
     config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/jre.m");
     config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/runtime.h");
@@ -39,6 +41,10 @@
         "",
         "exports_files(['jre_emul.jar'])",
         "",
+        "filegroup(",
+        "    name = 'jre_emul_module',",
+        "    srcs = ['mod/release', 'mod/lib/mods'])",
+        "",
         "objc_library(",
         "    name = 'jre_emul_lib',",
         "    hdrs = ['jre_emul.h'],",