aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar ajmichael <ajmichael@google.com>2017-05-31 23:32:13 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-06-01 14:08:54 +0200
commit3c93e0e486ee93356acd0d5e02e65b20e71f31ac (patch)
tree9ab75f0da4547168796c9e788db0f183138b6bcb /src
parentca600bf2d014650b1f1ecb5214878b09a0838086 (diff)
Remove NestedSets from ApkProvider.
The only call site passes single artifacts. Some of the read sites assert that the NestedSet contains only one element. RELNOTES: None PiperOrigin-RevId: 157635897
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApkProvider.java21
4 files changed, 23 insertions, 31 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index a42ad297e6..d893f140cb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -48,7 +48,6 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.collect.IterablesChain;
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.packages.BuildType;
import com.google.devtools.build.lib.packages.TriState;
@@ -216,17 +215,15 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
applicationManifest = ruleManifest.mergeWith(ruleContext, resourceDeps);
- Artifact featureOfArtifact
- = ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
- ? Iterables.getOnlyElement(
- ruleContext.getPrerequisite("feature_of", Mode.TARGET, ApkProvider.class)
- .getTransitiveApks())
+ Artifact featureOfArtifact =
+ ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
+ ? ruleContext.getPrerequisite("feature_of", Mode.TARGET, ApkProvider.class).getApk()
: null;
- Artifact featureAfterArtifact
- = ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
- ? Iterables.getOnlyElement(
- ruleContext.getPrerequisite("feature_after", Mode.TARGET, ApkProvider.class)
- .getTransitiveApks())
+ Artifact featureAfterArtifact =
+ ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
+ ? ruleContext
+ .getPrerequisite("feature_after", Mode.TARGET, ApkProvider.class)
+ .getApk()
: null;
resourceApk = applicationManifest.packWithDataAndResources(
@@ -595,10 +592,6 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
Iterables.concat(ImmutableList.of(zipAlignedApk), apksUnderTest),
dataDeps);
- NestedSet<Artifact> coverageMetadata = (androidCommon.getInstrumentedJar() != null)
- ? NestedSetBuilder.create(Order.STABLE_ORDER, androidCommon.getInstrumentedJar())
- : NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER);
-
RuleConfiguredTargetBuilder builder =
new RuleConfiguredTargetBuilder(ruleContext);
@@ -830,9 +823,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
.addProvider(
ApkProvider.class,
ApkProvider.create(
- NestedSetBuilder.create(Order.STABLE_ORDER, zipAlignedApk),
- coverageMetadata,
- NestedSetBuilder.create(Order.STABLE_ORDER, applicationManifest.getManifest())))
+ zipAlignedApk,
+ androidCommon.getInstrumentedJar(),
+ applicationManifest.getManifest()))
.addProvider(AndroidPreDexJarProvider.class, AndroidPreDexJarProvider.create(jarToDex))
.addProvider(
AndroidFeatureFlagSetProvider.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index c99c9fa704..8be37d96b3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -995,7 +995,7 @@ public class AndroidCommon {
// If ApkProvider is present, do not check FileProvider for .apk files. For example,
// android_binary creates a FileProvider containing both the signed and unsigned APKs.
if (apkProvider != null) {
- supportApks.addTransitive(apkProvider.getTransitiveApks());
+ supportApks.add(apkProvider.getApk());
} else if (fileProvider != null) {
// The rule definition should enforce that only .apk files are allowed, however, it can't
// hurt to double check.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java
index 3f29e1f7c7..75587bc9b6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java
@@ -132,7 +132,7 @@ public class AndroidInstrumentation implements RuleConfiguredTargetFactory {
Artifact existingApk;
ApkProvider apkProvider = transitiveInfoCollection.getProvider(ApkProvider.class);
if (apkProvider != null) {
- existingApk = Iterables.getOnlyElement(apkProvider.getTransitiveApks());
+ existingApk = apkProvider.getApk();
} else {
existingApk =
Iterables.getOnlyElement(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkProvider.java
index c14c61cdb0..0242c4f172 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkProvider.java
@@ -16,29 +16,28 @@ package com.google.devtools.build.lib.rules.android;
import com.google.auto.value.AutoValue;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import javax.annotation.Nullable;
-/** A provider for targets that can build .apk files. Currently used for coverage collection. */
+/** A provider for targets that produce an apk file. */
@AutoValue
@Immutable
public abstract class ApkProvider implements TransitiveInfoProvider {
public static ApkProvider create(
- NestedSet<Artifact> transitiveApks,
- NestedSet<Artifact> coverageMetdata,
- NestedSet<Artifact> mergedManifests) {
- return new AutoValue_ApkProvider(transitiveApks, coverageMetdata, mergedManifests);
+ Artifact apk, @Nullable Artifact coverageMetdata, Artifact mergedManifest) {
+ return new AutoValue_ApkProvider(apk, coverageMetdata, mergedManifest);
}
- /** Returns the APK files generated in the transitive closure. */
- public abstract NestedSet<Artifact> getTransitiveApks();
+ /** Returns the APK file built in the transitive closure. */
+ public abstract Artifact getApk();
/** Returns the coverage metadata artifacts generated in the transitive closure. */
- public abstract NestedSet<Artifact> getCoverageMetadata();
+ @Nullable
+ public abstract Artifact getCoverageMetadata();
- /** Returns the merged manifests */
- public abstract NestedSet<Artifact> getMergedManifests();
+ /** Returns the merged manifest. */
+ public abstract Artifact getMergedManifest();
ApkProvider() {}
}