aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java57
1 files changed, 36 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
index 324766d323..7b128596eb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.CompilationMode;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import java.util.Optional;
import javax.annotation.Nullable;
/**
@@ -228,35 +229,49 @@ public final class ResourceApk {
return resourceDeps.toInfo(validatedResources);
}
- public void addToConfiguredTargetBuilder(
- RuleConfiguredTargetBuilder builder, Label label, boolean includeSkylarkApiProvider) {
- AndroidResourcesInfo resourceInfo = toResourceInfo(label);
- builder.addNativeDeclaredProvider(resourceInfo);
+ // TODO(b/77574966): Stop returning an Optional once we get rid of ResourceContainer and can
+ // guarantee that only properly merged assets are passed into this object.
+ Optional<AndroidAssetsInfo> toAssetsInfo(Label label) {
+ if (primaryAssets instanceof MergedAndroidAssets) {
+ MergedAndroidAssets merged = (MergedAndroidAssets) primaryAssets;
+ AndroidAssetsInfo assetsInfo = merged.toProvider();
+ return Optional.of(assetsInfo);
+ } else if (primaryAssets == null) {
+ return Optional.of(assetDeps.toInfo(label));
+ } else {
+ return Optional.empty();
+ }
+ }
- // TODO(b/77574966): Remove this cast once we get rid of ResourceContainer and can guarantee
- // that only properly merged resources are passed into this object.
+ // TODO(b/77574966): Remove this cast once we get rid of ResourceContainer and can guarantee
+ // that only properly merged resources are passed into this object.
+ Optional<AndroidManifestInfo> toManifestInfo() {
if (validatedResources instanceof ValidatedAndroidResources) {
ValidatedAndroidResources validated = (ValidatedAndroidResources) validatedResources;
- builder.addNativeDeclaredProvider(validated.getStampedManifest().toProvider());
+ return Optional.of(validated.getStampedManifest().toProvider());
}
- // TODO(b/77574966): Remove this cast once we get rid of ResourceContainer and can guarantee
- // that only properly merged resources are passed into this object.
- if (primaryAssets instanceof MergedAndroidAssets) {
- MergedAndroidAssets merged = (MergedAndroidAssets) primaryAssets;
- AndroidAssetsInfo assetsInfo = merged.toProvider();
- builder.addNativeDeclaredProvider(assetsInfo);
+ return Optional.empty();
+ }
- if (assetsInfo.getValidationResult() != null) {
- // Asset merging output isn't consumed by anything. Require it to be run by top-level
- // targets
- // so we can validate there are no asset merging conflicts.
- builder.addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, assetsInfo.getValidationResult());
- }
+ public void addToConfiguredTargetBuilder(
+ RuleConfiguredTargetBuilder builder, Label label, boolean includeSkylarkApiProvider) {
+ AndroidResourcesInfo resourceInfo = toResourceInfo(label);
+ builder.addNativeDeclaredProvider(resourceInfo);
- } else if (primaryAssets == null) {
- builder.addNativeDeclaredProvider(assetDeps.toInfo(label));
+ Optional<AndroidManifestInfo> manifestInfo = toManifestInfo();
+ manifestInfo.ifPresent(builder::addNativeDeclaredProvider);
+
+ Optional<AndroidAssetsInfo> assetsInfo = toAssetsInfo(label);
+ if (assetsInfo.isPresent()) {
+ builder.addNativeDeclaredProvider(assetsInfo.get());
+ if (assetsInfo.get().getValidationResult() != null) {
+ // Asset merging output isn't consumed by anything. Require it to be run by top-level targets
+ // so we can validate there are no asset merging conflicts.
+ builder.addOutputGroup(
+ OutputGroupInfo.HIDDEN_TOP_LEVEL, assetsInfo.get().getValidationResult());
+ }
}
if (includeSkylarkApiProvider) {