aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-25 11:16:34 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-25 11:17:48 -0700
commitc2cf1132a75d03cc37888fe8c2b9583c7ce198c5 (patch)
tree77d981b934797bb9e335cabf1c9c496023bb74e9 /src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
parent2643d4b7543403eae52c038e769231f539938195 (diff)
Automated rollback of commit 372fbc2f016157b0331f83a20edad10d4b4cf9f7.
*** Reason for rollback *** Roll forward with fix: I was assuming that R.txt and symbols files are always set, but they can be null in some cases (especially in the old data processing pipeline). Properly handle them here. RELNOTES: none PiperOrigin-RevId: 198075743
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java103
1 files changed, 28 insertions, 75 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
index 849881297c..c4e33f1eee 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
@@ -13,21 +13,9 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.ParamFileInfo;
-import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.Builder;
-import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg;
-import com.google.devtools.build.lib.analysis.actions.SpawnAction;
-import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.rules.android.AndroidDataConverter.JoinerType;
-import java.util.ArrayList;
-import java.util.List;
import java.util.function.Function;
/** Builds up the spawn action for $android_rclass_generator. */
@@ -42,18 +30,12 @@ public class RClassGeneratorActionBuilder {
.with(chooseDepsToArg(AndroidAaptVersion.AAPT2))
.build();
- private final RuleContext ruleContext;
private ResourceDependencies dependencies;
private Artifact classJarOut;
private AndroidAaptVersion version;
- /** @param ruleContext The RuleContext that is used to create a SpawnAction.Builder. */
- public RClassGeneratorActionBuilder(RuleContext ruleContext) {
- this.ruleContext = ruleContext;
- }
-
public RClassGeneratorActionBuilder withDependencies(ResourceDependencies resourceDeps) {
this.dependencies = resourceDeps;
return this;
@@ -69,72 +51,43 @@ public class RClassGeneratorActionBuilder {
return this;
}
- public ResourceContainer build(ResourceContainer primary) {
- build(primary.getRTxt(), ProcessedAndroidManifest.from(primary));
+ public ResourceContainer build(AndroidDataContext dataContext, ResourceContainer primary) {
+ build(dataContext, primary.getRTxt(), ProcessedAndroidManifest.from(primary));
return primary.toBuilder().setJavaClassJar(classJarOut).build();
}
- public ResourceApk build(ProcessedAndroidData data) {
- build(data.getRTxt(), data.getManifest());
+ public ResourceApk build(AndroidDataContext dataContext, ProcessedAndroidData data) {
+ build(dataContext, data.getRTxt(), data.getManifest());
return data.withValidatedResources(classJarOut);
}
- private void build(Artifact rTxt, ProcessedAndroidManifest manifest) {
- Builder builder = new Builder();
-
- // Set the busybox tool.
- builder.add("--tool").add("GENERATE_BINARY_R").add("--");
-
- NestedSetBuilder<Artifact> inputs = NestedSetBuilder.naiveLinkOrder();
- inputs.addAll(
- ruleContext
- .getExecutablePrerequisite("$android_resources_busybox", Mode.HOST)
- .getRunfilesSupport()
- .getRunfilesArtifacts());
-
- List<Artifact> outs = new ArrayList<>();
- builder.addExecPath("--primaryRTxt", rTxt);
- inputs.add(rTxt);
- builder.addExecPath("--primaryManifest", manifest.getManifest());
- inputs.add(manifest.getManifest());
- if (!Strings.isNullOrEmpty(manifest.getPackage())) {
- builder.add("--packageForR", manifest.getPackage());
+ private void build(
+ AndroidDataContext dataContext, Artifact rTxt, ProcessedAndroidManifest manifest) {
+ BusyBoxActionBuilder builder =
+ BusyBoxActionBuilder.create(dataContext, "GENERATE_BINARY_R")
+ .addInput("--primaryRTxt", rTxt)
+ .addInput("--primaryManifest", manifest.getManifest())
+ .maybeAddFlag("--packageForR", manifest.getPackage());
+
+ if (dependencies != null && !dependencies.getResourceContainers().isEmpty()) {
+ builder
+ .addTransitiveFlagForEach(
+ "--library",
+ dependencies.getResourceContainers(),
+ version == AndroidAaptVersion.AAPT2 ? AAPT2_CONVERTER : AAPT_CONVERTER)
+ .addTransitiveInputValues(
+ version == AndroidAaptVersion.AAPT2
+ ? dependencies.getTransitiveAapt2RTxt()
+ : dependencies.getTransitiveRTxt())
+ .addTransitiveInputValues(dependencies.getTransitiveManifests());
}
- if (dependencies != null) {
- if (!dependencies.getResourceContainers().isEmpty()) {
- builder.addAll(
- VectorArg.addBefore("--library")
- .each(dependencies.getResourceContainers())
- .mapped(version == AndroidAaptVersion.AAPT2 ? AAPT2_CONVERTER : AAPT_CONVERTER));
- if (version == AndroidAaptVersion.AAPT2) {
- inputs.addTransitive(dependencies.getTransitiveAapt2RTxt());
- } else {
- inputs.addTransitive(dependencies.getTransitiveRTxt());
- }
- inputs.addTransitive(dependencies.getTransitiveManifests());
- }
- }
- builder.addExecPath("--classJarOutput", classJarOut);
- outs.add(classJarOut);
- builder.addLabel("--targetLabel", ruleContext.getLabel());
-
- // Create the spawn action.
- SpawnAction.Builder spawnActionBuilder = new SpawnAction.Builder();
-
- ruleContext.registerAction(
- spawnActionBuilder
- .useDefaultShellEnvironment()
- .addTransitiveInputs(inputs.build())
- .addOutputs(ImmutableList.<Artifact>copyOf(outs))
- .addCommandLine(
- builder.build(), ParamFileInfo.builder(ParameterFileType.SHELL_QUOTED).build())
- .setExecutable(
- ruleContext.getExecutablePrerequisite("$android_resources_busybox", Mode.HOST))
- .setProgressMessage("Generating R Classes: %s", ruleContext.getLabel())
- .setMnemonic("RClassGenerator")
- .build(ruleContext));
+
+ builder
+ .addOutput("--classJarOutput", classJarOut)
+ .addLabelFlag("--targetLabel")
+ .buildAndRegister("Generating R Classes", "RClassGenerator");
}
private static Function<ValidatedAndroidData, String> chooseDepsToArg(