aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-08-23 00:56:17 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-23 13:31:29 +0200
commit79f36d54427ce6d2dbef33e25c672b58375cbe18 (patch)
tree9661a4116302fdfbbb35e149a6f9b7371d81f867 /src/main
parent31599166a464a207168b9abbcc23678487253e57 (diff)
Use CustomCommandLine directly instead of via SpawnAction.Builder.
This change forces use of CustomCommandLine.Builder, which has a richer interface for constructing memory-efficient command lines. It will also permit surveying the code base for inefficient patterns using an IDE. This change was done by hand and split using Rosie to assist with rollbacks in case of bugs. Reviewers, please pay particular attention to: * Each all to addInputArgument/addOutputArgument should come with a corresponding matching pair to SpawnAction.Builder#addInput and CustomCommandLine.Builder#addExecPath (eg.). * The commandLine must be set on the SpawnAction using SpawnAction.Builder#setCommandLine. Note that most calls to addPrefixed("arg=", val) should be more idiomatically expressed as add("arg", val), but this involves changing tests and making sure that the command line tools can accept the format. PiperOrigin-RevId: 166127199
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestMergeHelper.java36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestMergeHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestMergeHelper.java
index 1852657c16..29b96b66c4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestMergeHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestMergeHelper.java
@@ -16,11 +16,9 @@ package com.google.devtools.build.lib.rules.android;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
-
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
public final class AndroidManifestMergeHelper {
@@ -29,28 +27,28 @@ public final class AndroidManifestMergeHelper {
public static void createMergeManifestAction(RuleContext ruleContext,
Artifact merger, Iterable<Artifact> mergees,
Collection<String> excludePermissions, Artifact mergedManifest) {
- List<String> args = new ArrayList<>();
- args.add("--merger=" + merger.getExecPathString());
-
+ CustomCommandLine.Builder commandLine = CustomCommandLine.builder();
+ commandLine.addPrefixedExecPath("--merger=", merger);
for (Artifact mergee : mergees) {
- args.add("--mergee=" + mergee.getExecPathString());
+ commandLine.addPrefixedExecPath("--mergee=", mergee);
}
for (String excludePermission : excludePermissions) {
- args.add("--exclude_permission=" + excludePermission);
+ commandLine.addPrefixed("--exclude_permission=", excludePermission);
}
- args.add("--output=" + mergedManifest.getExecPathString());
-
- ruleContext.registerAction(new SpawnAction.Builder()
- .addInput(merger)
- .addInputs(mergees)
- .addOutput(mergedManifest)
- .setExecutable(ruleContext.getPrerequisite("$android_manifest_merge_tool", Mode.HOST))
- .addArguments(args)
- .setProgressMessage("Merging Android Manifests")
- .setMnemonic("AndroidManifestMerger")
- .build(ruleContext));
+ commandLine.addPrefixedExecPath("--output=", mergedManifest);
+
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .addInput(merger)
+ .addInputs(mergees)
+ .addOutput(mergedManifest)
+ .setExecutable(ruleContext.getPrerequisite("$android_manifest_merge_tool", Mode.HOST))
+ .setProgressMessage("Merging Android Manifests")
+ .setMnemonic("AndroidManifestMerger")
+ .setCommandLine(commandLine.build())
+ .build(ruleContext));
}
}