diff options
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.java | 57 |
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) { |