aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-06-15 08:41:59 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-15 08:43:36 -0700
commitfc0030c9b2261096cab72f7addfe7966915758dc (patch)
tree9635858d6f475c0e592ec15928c69c986a8c3cca /src
parenta5e36eeb6d97cb7530317d565062b39de7392c55 (diff)
Don't propagate empty asset containers
If asset containers are empty, simply discard them rather than propagating them up the dependency graph. We don't currently use merging output except at the top level, so we don't need any of this information. (If/when asset merging is redone, we'd need to redo this code anyway.) RELNOTES: none PiperOrigin-RevId: 200721055
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AssetDependencies.java24
2 files changed, 30 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
index b60d9d1972..c3a0c8634d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
@@ -228,17 +228,23 @@ public abstract class AndroidSkylarkData
}
// Get the target's local assets, if defined, from the provider
- boolean definesLocalAssets = assetsInfo.getDirectParsedAssets().isSingleton();
+ boolean definesLocalAssets = false;
AndroidAssets assets = AndroidAssets.empty();
- if (definesLocalAssets) {
+ if (assetsInfo.getDirectParsedAssets().isSingleton()) {
ParsedAndroidAssets parsed = assetsInfo.getDirectParsedAssets().toList().get(0);
if (parsed.getLabel().equals(ctx.getLabel())) {
assets = parsed;
- } else {
- definesLocalAssets = false;
+ definesLocalAssets = true;
}
}
+ if (!definesLocalAssets) {
+ // The target might still define an empty list of assets, in which case its information is not
+ // propagated for efficiency. If this is the case, we will still have an artifact for the
+ // merging output.
+ definesLocalAssets = assetsInfo.getValidationResult() != null;
+ }
+
if (definesLocalResources != definesLocalAssets) {
throw new EvalException(
Location.BUILTIN,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AssetDependencies.java b/src/main/java/com/google/devtools/build/lib/rules/android/AssetDependencies.java
index 531d2501cf..2d52a7cb79 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AssetDependencies.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AssetDependencies.java
@@ -119,6 +119,25 @@ public class AssetDependencies {
return AndroidAssetsInfo.empty(assets.getLabel());
}
+ NestedSet<ParsedAndroidAssets> updatedTransitiveParsedAssets =
+ NestedSetBuilder.<ParsedAndroidAssets>naiveLinkOrder()
+ .addTransitive(transitiveParsedAssets)
+ .addTransitive(directParsedAssets)
+ .build();
+
+ if (assets.getAssets().isEmpty()) {
+ return AndroidAssetsInfo.of(
+ assets.getLabel(),
+ // Even though no new assets were added, we should still make merging output available so
+ // callers can ensure validation succeeded.
+ assets.getMergedAssets(),
+ NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER),
+ updatedTransitiveParsedAssets,
+ transitiveAssets,
+ transitiveSymbols,
+ transitiveCompiledSymbols);
+ }
+
// Create a new object to avoid passing around unwanted merge information to the provider
ParsedAndroidAssets parsedAssets = new ParsedAndroidAssets(assets);
@@ -133,10 +152,7 @@ public class AssetDependencies {
assets.getLabel(),
assets.getMergedAssets(),
NestedSetBuilder.create(Order.NAIVE_LINK_ORDER, parsedAssets),
- NestedSetBuilder.<ParsedAndroidAssets>naiveLinkOrder()
- .addTransitive(transitiveParsedAssets)
- .addTransitive(directParsedAssets)
- .build(),
+ updatedTransitiveParsedAssets,
NestedSetBuilder.<Artifact>naiveLinkOrder()
.addTransitive(transitiveAssets)
.addAll(assets.getAssets())