diff options
author | 2017-05-31 23:32:13 +0200 | |
---|---|---|
committer | 2017-06-01 14:08:54 +0200 | |
commit | 3c93e0e486ee93356acd0d5e02e65b20e71f31ac (patch) | |
tree | 9ab75f0da4547168796c9e788db0f183138b6bcb /src | |
parent | ca600bf2d014650b1f1ecb5214878b09a0838086 (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')
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() {} } |