aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
diff options
context:
space:
mode:
authorGravatar Andrew Pellegrini <apell@google.com>2015-08-31 21:08:30 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-09-01 00:20:05 +0000
commitd23b7fbd47850ee7e8c9c5987eff328c0721d206 (patch)
treefc52f949b37a38ec4cdd57ed16e0199dbf897590 /src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
parenta7deb78dfbee2b5daa2208c3ff1d50b747de07aa (diff)
Switches AndroidRobolectricTest to using .aars to provide transitive resources to the test runner instead of ResourceContainers. Update AndroidLibraryAarProvider to contain transitive closure of .aars. Provides an ~4x speed improvement in test startup time.
NEW: Switched to ordered maps in CompositeLibraryAndroidManifestLocator to prevent manifest ordering flakiness bug. Switched to ImmutableSetMultimap in CompositeLibraryAndroidManifestLocator to prevent IllegalArgumentExceptions from duplicate package aliases and added test. RELNOTES: android_resources is no longer allowed as a dep for android_robolectric_test. -- MOS_MIGRATED_REVID=101972311
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java58
1 files changed, 50 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
index 59402defd8..f4f16bd96f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java
@@ -16,8 +16,11 @@ package com.google.devtools.build.lib.rules.android;
import com.google.common.base.Preconditions;
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 java.util.Objects;
+
/**
* A target that can provide the aar artifact of Android libraries and all the manifests that are
* merged into the main aar manifest.
@@ -25,19 +28,58 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@Immutable
public final class AndroidLibraryAarProvider implements TransitiveInfoProvider {
- private final Artifact aar;
- private final Artifact manifest;
+ private final Aar aar;
+ private final NestedSet<Aar> transitiveAars;
- public AndroidLibraryAarProvider(Artifact aar, Artifact manifest) {
- this.aar = Preconditions.checkNotNull(aar);
- this.manifest = Preconditions.checkNotNull(manifest);
+ public AndroidLibraryAarProvider(Aar aar, NestedSet<Aar> transitiveAars) {
+ this.aar = aar;
+ this.transitiveAars = transitiveAars;
}
- public Artifact getAar() {
+ public Aar getAar() {
return aar;
}
- public Artifact getManifest() {
- return manifest;
+ public NestedSet<Aar> getTransitiveAars() {
+ return transitiveAars;
+ }
+
+ /**
+ * The .aar file and associated AndroidManifest.xml contributed by a single target.
+ */
+ @Immutable
+ public static final class Aar {
+ private final Artifact aar;
+ private final Artifact manifest;
+
+ public Aar(Artifact aar, Artifact manifest) {
+ this.aar = Preconditions.checkNotNull(aar);
+ this.manifest = Preconditions.checkNotNull(manifest);
+ }
+
+ public Artifact getAar() {
+ return aar;
+ }
+
+ public Artifact getManifest() {
+ return manifest;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(aar, manifest);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof Aar)) {
+ return false;
+ }
+ Aar other = (Aar) obj;
+ return aar.equals(other.aar) && manifest.equals(other.manifest);
+ }
}
}