Allow proguard whitelister to be a deploy jar

PiperOrigin-RevId: 342357126
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java
index 25893c7..ff0f34c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java
@@ -73,7 +73,7 @@
         return specsBuilder.build();
       }
       for (Artifact specToValidate : localSpecs) {
-        specsBuilder.add(validateProguardSpec(proguardAllowlister, specToValidate));
+        specsBuilder.add(validateProguardSpec(ruleContext, proguardAllowlister, specToValidate));
       }
     }
 
@@ -109,7 +109,7 @@
    * validated Proguard spec, ready to be exported.
    */
   private Artifact validateProguardSpec(
-      FilesToRunProvider proguardAllowlister, Artifact specToValidate) {
+      RuleContext ruleContext, FilesToRunProvider proguardAllowlister, Artifact specToValidate) {
     // If we're validating j/a/b/testapp/proguard.cfg, the output will be:
     // j/a/b/testapp/proguard.cfg_valid
     Artifact output =
@@ -119,19 +119,29 @@
                 .getRootRelativePath()
                 .replaceName(specToValidate.getFilename() + "_valid"),
             ruleContext.getBinOrGenfilesDirectory());
-    ruleContext.registerAction(
-        new SpawnAction.Builder()
-            .addInput(specToValidate)
-            .addOutput(output)
-            .setExecutable(proguardAllowlister)
-            .setProgressMessage("Validating proguard configuration")
-            .setMnemonic("ValidateProguard")
-            .addCommandLine(
-                CustomCommandLine.builder()
-                    .addExecPath("--path", specToValidate)
-                    .addExecPath("--output", output)
-                    .build())
-            .build(ruleContext));
+    SpawnAction.Builder builder =
+        new SpawnAction.Builder().addInput(specToValidate).addOutput(output);
+    if (proguardAllowlister.getExecutable().getExtension().equals("jar")) {
+      builder
+          .setJarExecutable(
+              JavaCommon.getHostJavaExecutable(ruleContext),
+              proguardAllowlister.getExecutable(),
+              JavaToolchainProvider.from(ruleContext).getJvmOptions())
+          .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman());
+    } else {
+      // TODO(b/170769708): remove this branch and require java_toolchain.proguard_allowlister to
+      // always be a _deploy.jar
+      builder.setExecutable(proguardAllowlister);
+    }
+    builder
+        .setProgressMessage("Validating proguard configuration")
+        .setMnemonic("ValidateProguard")
+        .addCommandLine(
+            CustomCommandLine.builder()
+                .addExecPath("--path", specToValidate)
+                .addExecPath("--output", output)
+                .build());
+    ruleContext.registerAction(builder.build(ruleContext));
     return output;
   }
 }