aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java
diff options
context:
space:
mode:
authorGravatar Andrew Pellegrini <apell@google.com>2016-07-20 17:47:49 +0000
committerGravatar John Cater <jcater@google.com>2016-07-20 19:54:32 +0000
commitebf601d340c570d2666a1293a144975938a063f2 (patch)
treeeea31029e94770d552faeb7e427f93435e338bc5 /src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java
parentff8ea95fb2e4c77104263bebbf21c7e4e7a00d00 (diff)
Add target names for mergee manifests to generate more helpful error messages from manifest merging when using manifest_merger="android" on android_binary rules.
-- MOS_MIGRATED_REVID=127962630
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java45
1 files changed, 37 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java
index 21174401a0..4d480579df 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java
@@ -13,17 +13,20 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
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.ActionConstructionContext;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -35,7 +38,7 @@ public class ManifestMergerActionBuilder {
private final SpawnAction.Builder spawnActionBuilder;
private Artifact manifest;
- private List<Artifact> mergeeManifests;
+ private Map<Artifact, Label> mergeeManifests;
private boolean isLibrary;
private Map<String, String> manifestValues;
private String customPackage;
@@ -51,8 +54,8 @@ public class ManifestMergerActionBuilder {
return this;
}
- public ManifestMergerActionBuilder setMergeeManifests(Iterable<Artifact> mergeeManifests) {
- this.mergeeManifests = ImmutableList.copyOf(mergeeManifests);
+ public ManifestMergerActionBuilder setMergeeManifests(Map<Artifact, Label> mergeeManifests) {
+ this.mergeeManifests = ImmutableMap.copyOf(mergeeManifests);
return this;
}
@@ -89,8 +92,15 @@ public class ManifestMergerActionBuilder {
inputs.add(manifest);
if (mergeeManifests != null && !mergeeManifests.isEmpty()) {
- builder.addJoinExecPaths("--mergeeManifests", ":", mergeeManifests);
- inputs.addAll(mergeeManifests);
+ builder.add("--mergeeManifests")
+ .add(mapToDictionaryString(mergeeManifests,
+ new Function<Artifact, String>() {
+ @Override public String apply(Artifact input) {
+ return input.getExecPathString();
+ }
+ },
+ null /* valueConverter */));
+ inputs.addAll(mergeeManifests.keySet());
}
if (isLibrary) {
@@ -120,14 +130,33 @@ public class ManifestMergerActionBuilder {
.build(context));
}
+ private static final Function<String, String> ESCAPER = new Function<String, String>() {
+ @Override public String apply(String value) {
+ return value.replace(":", "\\:").replace(",", "\\,");
+ }
+ };
+
private <K, V> String mapToDictionaryString(Map<K, V> map) {
+ return mapToDictionaryString(map, Functions.toStringFunction(), Functions.toStringFunction());
+ }
+
+ private <K, V> String mapToDictionaryString(Map<K, V> map,
+ Function<? super K, String> keyConverter,
+ Function<? super V, String> valueConverter) {
+ if (keyConverter == null) {
+ keyConverter = Functions.toStringFunction();
+ }
+ if (valueConverter == null) {
+ valueConverter = Functions.toStringFunction();
+ }
+
StringBuilder sb = new StringBuilder();
Iterator<Entry<K, V>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Entry<K, V> entry = iter.next();
- sb.append(entry.getKey().toString().replace(":", "\\:").replace(",", "\\,"));
+ sb.append(Functions.compose(ESCAPER, keyConverter).apply(entry.getKey()));
sb.append(':');
- sb.append(entry.getValue().toString().replace(":", "\\:").replace(",", "\\,"));
+ sb.append(Functions.compose(ESCAPER, valueConverter).apply(entry.getValue()));
if (iter.hasNext()) {
sb.append(',');
}