diff options
author | 2016-07-20 17:47:49 +0000 | |
---|---|---|
committer | 2016-07-20 19:54:32 +0000 | |
commit | ebf601d340c570d2666a1293a144975938a063f2 (patch) | |
tree | eea31029e94770d552faeb7e427f93435e338bc5 /src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java | |
parent | ff8ea95fb2e4c77104263bebbf21c7e4e7a00d00 (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.java | 45 |
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(','); } |