diff options
Diffstat (limited to 'src/main/java/com/google')
16 files changed, 141 insertions, 69 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java index 1963fa7ad9..4af26bff72 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java @@ -37,8 +37,8 @@ public class AndroidResourcesInfo extends NativeInfo { new NativeProvider<AndroidResourcesInfo>(AndroidResourcesInfo.class, SKYLARK_NAME) {}; private final Label label; - private final NestedSet<ResourceContainer> transitiveAndroidResources; - private final NestedSet<ResourceContainer> directAndroidResources; + private final NestedSet<ValidatedAndroidData> transitiveAndroidResources; + private final NestedSet<ValidatedAndroidData> directAndroidResources; private final NestedSet<Artifact> transitiveResources; private final NestedSet<Artifact> transitiveAssets; private final NestedSet<Artifact> transitiveManifests; @@ -50,8 +50,8 @@ public class AndroidResourcesInfo extends NativeInfo { AndroidResourcesInfo( Label label, - NestedSet<ResourceContainer> transitiveAndroidResources, - NestedSet<ResourceContainer> directAndroidResources, + NestedSet<ValidatedAndroidData> transitiveAndroidResources, + NestedSet<ValidatedAndroidData> directAndroidResources, NestedSet<Artifact> transitiveResources, NestedSet<Artifact> transitiveAssets, NestedSet<Artifact> transitiveManifests, @@ -86,7 +86,7 @@ public class AndroidResourcesInfo extends NativeInfo { doc = "Returns the transitive android resources for the label.", structField = true ) - public NestedSet<ResourceContainer> getTransitiveAndroidResources() { + public NestedSet<ValidatedAndroidData> getTransitiveAndroidResources() { return transitiveAndroidResources; } @@ -96,7 +96,7 @@ public class AndroidResourcesInfo extends NativeInfo { doc = "Returns the immediate android resources for the label.", structField = true ) - public NestedSet<ResourceContainer> getDirectAndroidResources() { + public NestedSet<ValidatedAndroidData> getDirectAndroidResources() { return directAndroidResources; } @@ -104,6 +104,8 @@ public class AndroidResourcesInfo extends NativeInfo { return transitiveResources; } + /** @deprecated Assets are being decoupled from resources */ + @Deprecated public NestedSet<Artifact> getTransitiveAssets() { return transitiveAssets; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java index 23c500825e..c69902f324 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java @@ -23,12 +23,12 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import java.util.function.Function; import javax.annotation.Nullable; /** @@ -155,7 +155,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { doc = "Returns resources defined by this target." ) public NestedSet<Artifact> getResources() { - return collectDirectArtifacts(ResourceType.RESOURCES); + return collectDirectArtifacts(ValidatedAndroidData::getResources); } @SkylarkCallable( @@ -179,7 +179,8 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { return getIdeInfoProvider().getAar(); } - private NestedSet<Artifact> collectDirectArtifacts(final ResourceType resources) { + private NestedSet<Artifact> collectDirectArtifacts( + final Function<ValidatedAndroidData, Iterable<Artifact>> artifactFunction) { if (resourceInfo == null) { return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } @@ -189,9 +190,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { Order.STABLE_ORDER, Iterables.concat( Iterables.transform( - resourceInfo.getDirectAndroidResources(), - (ResourceContainer resourceContainer) -> - resourceContainer.getArtifacts(resources)))); + resourceInfo.getDirectAndroidResources(), data -> artifactFunction.apply(data)))); } /** Helper class to provide information about IDLs related to this rule. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java index 2f3ff356b0..848a0d3477 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java @@ -255,12 +255,12 @@ public final class ApplicationManifest { } private static Map<Artifact, Label> getMergeeManifests( - Iterable<ResourceContainer> resourceContainers) { + Iterable<ValidatedAndroidData> transitiveData) { ImmutableSortedMap.Builder<Artifact, Label> builder = ImmutableSortedMap.orderedBy(Artifact.EXEC_PATH_COMPARATOR); - for (ResourceContainer r : resourceContainers) { - if (r.isManifestExported()) { - builder.put(r.getManifest(), r.getLabel()); + for (ValidatedAndroidData d : transitiveData) { + if (d.isManifestExported()) { + builder.put(d.getManifest(), d.getLabel()); } } return builder.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/CompiledMergableAndroidData.java b/src/main/java/com/google/devtools/build/lib/rules/android/CompiledMergableAndroidData.java index a32fbf389a..56c9f8085b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/CompiledMergableAndroidData.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/CompiledMergableAndroidData.java @@ -29,4 +29,6 @@ public interface CompiledMergableAndroidData extends MergableAndroidData { Iterable<Artifact> getArtifacts(); Artifact getManifest(); + + boolean isManifestExported(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java index 14dfa203f9..3a23bcc5e8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java @@ -32,7 +32,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order; /** Builder for the action that generates the R class for libraries. */ public class LibraryRGeneratorActionBuilder { private String javaPackage; - private Iterable<ResourceContainer> deps = ImmutableList.<ResourceContainer>of(); + private Iterable<ValidatedAndroidData> deps = ImmutableList.of(); private ResourceContainer resourceContainer; private Artifact rJavaClassJar; @@ -71,12 +71,12 @@ public class LibraryRGeneratorActionBuilder { builder.add("--packageForR", javaPackage); } - FluentIterable<ResourceContainer> symbolProviders = + FluentIterable<ValidatedAndroidData> symbolProviders = FluentIterable.from(deps).append(resourceContainer); if (!symbolProviders.isEmpty()) { ImmutableList<Artifact> symbols = - symbolProviders.stream().map(ResourceContainer::getSymbols).collect(toImmutableList()); + symbolProviders.stream().map(ValidatedAndroidData::getSymbols).collect(toImmutableList()); builder.addExecPaths("--symbols", symbols); inputs.addTransitive(NestedSetBuilder.wrap(Order.NAIVE_LINK_ORDER, symbols)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java index 8b7fc72481..be896110ff 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java @@ -121,6 +121,10 @@ public class MergedAndroidResources extends ParsedAndroidResources { return dataBindingInfoZip; } + public Artifact getJavaClassJar() { + return classJar; + } + @Override public ProcessedAndroidManifest getStampedManifest() { return manifest; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java index d308d656a9..d5f73af10d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java @@ -105,6 +105,11 @@ public class ParsedAndroidResources extends AndroidResources } @Override + public boolean isManifestExported() { + return manifest.isExported(); + } + + @Override public Label getLabel() { return label; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java index c4f1559998..9c68d10f85 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java @@ -97,7 +97,7 @@ public class RClassGeneratorActionBuilder { } if (dependencies != null) { // TODO(corysmith): Remove NestedSet as we are already flattening it. - Iterable<ResourceContainer> depResources = dependencies.getResourceContainers(); + Iterable<ValidatedAndroidData> depResources = dependencies.getResourceContainers(); if (!Iterables.isEmpty(depResources)) { builder.addAll( VectorArg.addBefore("--library") @@ -132,15 +132,15 @@ public class RClassGeneratorActionBuilder { .build(ruleContext)); } - private static Artifact chooseRTxt(ResourceContainer container, AndroidAaptVersion version) { + private static Artifact chooseRTxt(ValidatedAndroidData container, AndroidAaptVersion version) { return version == AndroidAaptVersion.AAPT2 ? container.getAapt2RTxt() : container.getRTxt(); } - private static Function<ResourceContainer, NestedSet<Artifact>> chooseDepsToArtifacts( + private static Function<ValidatedAndroidData, NestedSet<Artifact>> chooseDepsToArtifacts( final AndroidAaptVersion version) { - return new Function<ResourceContainer, NestedSet<Artifact>>() { + return new Function<ValidatedAndroidData, NestedSet<Artifact>>() { @Override - public NestedSet<Artifact> apply(ResourceContainer container) { + public NestedSet<Artifact> apply(ValidatedAndroidData container) { NestedSetBuilder<Artifact> artifacts = NestedSetBuilder.naiveLinkOrder(); addIfNotNull(chooseRTxt(container, version), artifacts); addIfNotNull(container.getManifest(), artifacts); @@ -155,11 +155,11 @@ public class RClassGeneratorActionBuilder { }; } - private static Function<ResourceContainer, String> chooseDepsToArg( + private static Function<ValidatedAndroidData, String> chooseDepsToArg( final AndroidAaptVersion version) { - return new Function<ResourceContainer, String>() { + return new Function<ValidatedAndroidData, String>() { @Override - public String apply(ResourceContainer container) { + public String apply(ValidatedAndroidData container) { Artifact rTxt = chooseRTxt(container, version); return (rTxt != null ? rTxt.getExecPath() : "") + "," 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 24943b7950..b2b73a2aa6 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 @@ -105,6 +105,6 @@ public final class ResourceApk { if (primaryResource == null) { return resourceDeps.toInfo(label); } - return resourceDeps.toInfo(label, primaryResource); + return resourceDeps.toInfo(primaryResource); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java index 47cea1a2c0..6a7a6fa599 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java @@ -42,7 +42,7 @@ import javax.annotation.Nullable; category = SkylarkModuleCategory.NONE, doc = "The Android resources contributed by a single target." ) -public abstract class ResourceContainer implements CompiledMergableAndroidData { +public abstract class ResourceContainer implements ValidatedAndroidData { /** The type of resource in question: either asset or a resource. */ public enum ResourceType { ASSETS("assets"), @@ -65,6 +65,7 @@ public abstract class ResourceContainer implements CompiledMergableAndroidData { @Nullable public abstract String getJavaPackage(); + @Override @Nullable public abstract Artifact getApk(); @@ -76,6 +77,7 @@ public abstract class ResourceContainer implements CompiledMergableAndroidData { @Override public abstract Artifact getManifest(); + @Override @Nullable public abstract Artifact getJavaSourceJar(); @@ -133,6 +135,7 @@ public abstract class ResourceContainer implements CompiledMergableAndroidData { return resourceType == ResourceType.ASSETS ? getAssetRoots() : getResourceRoots(); } + @Override public abstract boolean isManifestExported(); @Nullable diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java index df15063d50..899340f67a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java @@ -25,8 +25,8 @@ import com.google.common.collect.Sets; import com.google.devtools.build.lib.actions.CommandLineItem; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; -import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType; import com.google.devtools.build.lib.rules.android.ResourceContainerConverter.ToArg.Includes; +import com.google.devtools.build.lib.vfs.PathFragment; import java.util.HashSet; import java.util.Set; import java.util.function.Consumer; @@ -46,7 +46,7 @@ public class ResourceContainerConverter { return new Builder(); } - static class ToArg extends CommandLineItem.ParametrizedMapFn<ResourceContainer> { + static class ToArg extends CommandLineItem.ParametrizedMapFn<ValidatedAndroidData> { private final Set<Includes> includes; private final SeparatorType separatorType; @@ -95,15 +95,15 @@ public class ResourceContainerConverter { } @Override - public void expandToCommandLine(ResourceContainer container, Consumer<String> args) { + public void expandToCommandLine(ValidatedAndroidData container, Consumer<String> args) { args.accept(map(container)); } - String map(ResourceContainer container) { + String map(ValidatedAndroidData container) { ImmutableList.Builder<String> cmdPieces = ImmutableList.builder(); if (includes.contains(Includes.ResourceRoots)) { - cmdPieces.add(convertRoots(container, ResourceType.RESOURCES)); - cmdPieces.add(convertRoots(container, ResourceType.ASSETS)); + cmdPieces.add(convertRoots(container.getResourceRoots())); + cmdPieces.add(convertRoots(container.getAssetRoots())); } if (includes.contains(Includes.Label)) { cmdPieces.add(escaper.apply(container.getLabel().toString())); @@ -198,11 +198,8 @@ public class ResourceContainerConverter { } @VisibleForTesting - public static String convertRoots(ResourceContainer container, ResourceType resourceType) { - return Joiner.on("#") - .join( - Iterators.transform( - container.getRoots(resourceType).iterator(), Functions.toStringFunction())); + public static String convertRoots(Iterable<PathFragment> roots) { + return Joiner.on("#").join(Iterators.transform(roots.iterator(), Functions.toStringFunction())); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java index 4740fb1f2b..cacae74343 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceDependencies.java @@ -53,8 +53,7 @@ public final class ResourceDependencies { * This should allow greater efficiency since we don't need to unroll this NestedSet to get a * particular input. TODO (b/67996945): Complete this migration. */ - @Deprecated - private final NestedSet<ResourceContainer> transitiveResourceContainers; + @Deprecated private final NestedSet<ValidatedAndroidData> transitiveResourceContainers; /** * Contains all the direct dependencies of the current target. Since a given direct dependency can @@ -65,8 +64,7 @@ public final class ResourceDependencies { * @deprecated Similarly to {@link #transitiveResourceContainers}, we are moving away from storing * ResourceContainer objects here. TODO (b/67996945): Complete this migration. */ - @Deprecated - private final NestedSet<ResourceContainer> directResourceContainers; + @Deprecated private final NestedSet<ValidatedAndroidData> directResourceContainers; /** * Transitive resource files for this target. @@ -94,8 +92,10 @@ public final class ResourceDependencies { private final boolean neverlink; public static ResourceDependencies fromRuleDeps(RuleContext ruleContext, boolean neverlink) { - NestedSetBuilder<ResourceContainer> transitiveDependencies = NestedSetBuilder.naiveLinkOrder(); - NestedSetBuilder<ResourceContainer> directDependencies = NestedSetBuilder.naiveLinkOrder(); + NestedSetBuilder<ValidatedAndroidData> transitiveDependencies = + NestedSetBuilder.naiveLinkOrder(); + NestedSetBuilder<ValidatedAndroidData> directDependencies = + NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveResources = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveAssets = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> transitiveManifests = NestedSetBuilder.naiveLinkOrder(); @@ -177,8 +177,8 @@ public final class ResourceDependencies { private ResourceDependencies( boolean neverlink, - NestedSet<ResourceContainer> transitiveResourceContainers, - NestedSet<ResourceContainer> directResourceContainers, + NestedSet<ValidatedAndroidData> transitiveResourceContainers, + NestedSet<ValidatedAndroidData> directResourceContainers, NestedSet<Artifact> transitiveResources, NestedSet<Artifact> transitiveAssets, NestedSet<Artifact> transitiveManifests, @@ -222,8 +222,8 @@ public final class ResourceDependencies { @VisibleForTesting ResourceDependencies withResources( - NestedSet<ResourceContainer> transitiveResourceContainers, - NestedSet<ResourceContainer> directResourceContainers, + NestedSet<ValidatedAndroidData> transitiveResourceContainers, + NestedSet<ValidatedAndroidData> directResourceContainers, NestedSet<Artifact> transitiveResources) { return new ResourceDependencies( neverlink, @@ -247,21 +247,20 @@ public final class ResourceDependencies { * identify the new container and merge appropriately. The previous direct dependencies are then * added to the transitive dependencies. * - * @param label The label of the library exporting this provider. * @param newDirectResource The new direct dependency for AndroidResourcesInfo * @return A provider with the current resources and label. */ - public AndroidResourcesInfo toInfo(Label label, ResourceContainer newDirectResource) { + public AndroidResourcesInfo toInfo(ValidatedAndroidData newDirectResource) { if (neverlink) { - return ResourceDependencies.empty().toInfo(label); + return ResourceDependencies.empty().toInfo(newDirectResource.getLabel()); } return new AndroidResourcesInfo( - label, - NestedSetBuilder.<ResourceContainer>naiveLinkOrder() + newDirectResource.getLabel(), + NestedSetBuilder.<ValidatedAndroidData>naiveLinkOrder() .addTransitive(transitiveResourceContainers) .addTransitive(directResourceContainers) .build(), - NestedSetBuilder.<ResourceContainer>naiveLinkOrder().add(newDirectResource).build(), + NestedSetBuilder.<ValidatedAndroidData>naiveLinkOrder().add(newDirectResource).build(), NestedSetBuilder.<Artifact>naiveLinkOrder() .addTransitive(transitiveResources) .addAll(newDirectResource.getResources()) @@ -324,8 +323,8 @@ public final class ResourceDependencies { * get the specific Artifacts you need instead. */ @Deprecated - public NestedSet<ResourceContainer> getResourceContainers() { - return NestedSetBuilder.<ResourceContainer>naiveLinkOrder() + public NestedSet<ValidatedAndroidData> getResourceContainers() { + return NestedSetBuilder.<ValidatedAndroidData>naiveLinkOrder() .addTransitive(directResourceContainers) .addTransitive(transitiveResourceContainers) .build(); @@ -336,7 +335,7 @@ public final class ResourceDependencies { * get the specific Artifacts you need instead. */ @Deprecated - public NestedSet<ResourceContainer> getTransitiveResourceContainers() { + public NestedSet<ValidatedAndroidData> getTransitiveResourceContainers() { return transitiveResourceContainers; } @@ -345,7 +344,7 @@ public final class ResourceDependencies { * get the specific Artifacts you need instead. */ @Deprecated - public NestedSet<ResourceContainer> getDirectResourceContainers() { + public NestedSet<ValidatedAndroidData> getDirectResourceContainers() { return directResourceContainers; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java index ff8c8112d6..15ef00a243 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilter.java @@ -65,17 +65,17 @@ public class ResourceFilter { return Optional.of(NestedSetBuilder.wrap(artifacts.getOrder(), filtered)); } - public NestedSet<ResourceContainer> filterDependencyContainers( - RuleErrorConsumer errorConsumer, NestedSet<ResourceContainer> resourceContainers) + public NestedSet<ValidatedAndroidData> filterDependencyContainers( + RuleErrorConsumer errorConsumer, NestedSet<ValidatedAndroidData> resourceContainers) throws RuleErrorException { if (isEmpty) { return resourceContainers; } - NestedSetBuilder<ResourceContainer> builder = + NestedSetBuilder<ValidatedAndroidData> builder = new NestedSetBuilder<>(resourceContainers.getOrder()); - for (ResourceContainer container : resourceContainers) { + for (ValidatedAndroidData container : resourceContainers) { builder.add(container.filter(errorConsumer, this, /* isDependency = */ true)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java index 207a729efd..6864d1ab68 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java @@ -236,7 +236,7 @@ public class ResourceShrinkerActionBuilder { private ImmutableList<Artifact> getManifests(ResourceDependencies resourceDependencies) { ImmutableList.Builder<Artifact> manifests = ImmutableList.builder(); - for (ResourceContainer resources : resourceDependencies.getResourceContainers()) { + for (ValidatedAndroidData resources : resourceDependencies.getResourceContainers()) { if (resources.getManifest() != null) { manifests.add(resources.getManifest()); } @@ -248,7 +248,7 @@ public class ResourceShrinkerActionBuilder { ResourceContainer primaryResources, ResourceDependencies resourceDependencies) { ImmutableList.Builder<String> resourcePackages = ImmutableList.builder(); resourcePackages.add(primaryResources.getJavaPackage()); - for (ResourceContainer resources : resourceDependencies.getResourceContainers()) { + for (ValidatedAndroidData resources : resourceDependencies.getResourceContainers()) { resourcePackages.add(resources.getJavaPackage()); } return resourcePackages.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidData.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidData.java new file mode 100644 index 0000000000..a6b6490f76 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidData.java @@ -0,0 +1,50 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.rules.android; + +import com.google.common.annotations.VisibleForTesting; +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.packages.RuleErrorConsumer; + +/** + * A {@link CompiledMergableAndroidData} that has been fully processed, validated, and packaged. + * + * <p>It contains resources and, depending on implementation, possibly assets and manifest. + * + * <p>TODO(b/76418178): Once resources and assets are completely decoupled and {@link + * ResourceContainer} is removed, this interface can be replaced with {@link + * ValidatedAndroidResources} + */ +public interface ValidatedAndroidData extends CompiledMergableAndroidData { + + Artifact getRTxt(); + + Artifact getAapt2RTxt(); + + Artifact getStaticLibrary(); + + ValidatedAndroidData filter( + RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) + throws RuleErrorException; + + Artifact getJavaClassJar(); + + String getJavaPackage(); + + Artifact getJavaSourceJar(); + + @VisibleForTesting + Artifact getApk(); +} diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java index d8c86865af..c6158b5d43 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java @@ -23,8 +23,9 @@ import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; -/** Wraps {@link AndroidResources} that have been validated, processed, and packaged. */ -public class ValidatedAndroidResources extends MergedAndroidResources { +/** Wraps validated and packaged Android resource information */ +public class ValidatedAndroidResources extends MergedAndroidResources + implements ValidatedAndroidData { private final Artifact rTxt; private final Artifact sourceJar; private final Artifact apk; @@ -117,18 +118,26 @@ public class ValidatedAndroidResources extends MergedAndroidResources { this.staticLibrary = staticLibrary; } + public AndroidResourcesInfo toProvider() { + return getResourceDependencies().toInfo(this); + } + + @Override public Artifact getRTxt() { return rTxt; } - public Artifact getSourceJar() { + @Override + public Artifact getJavaSourceJar() { return sourceJar; } + @Override public Artifact getApk() { return apk; } + @Override @Nullable public Artifact getAapt2RTxt() { return aapt2RTxt; @@ -139,11 +148,13 @@ public class ValidatedAndroidResources extends MergedAndroidResources { return aapt2SourceJar; } + @Override @Nullable public Artifact getStaticLibrary() { return staticLibrary; } + @Override public ValidatedAndroidResources filter( RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) throws RuleErrorException { |