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; } }