diff options
author | 2015-08-31 21:08:30 +0000 | |
---|---|---|
committer | 2015-09-01 00:20:05 +0000 | |
commit | d23b7fbd47850ee7e8c9c5987eff328c0721d206 (patch) | |
tree | fc52f949b37a38ec4cdd57ed16e0199dbf897590 /src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java | |
parent | a7deb78dfbee2b5daa2208c3ff1d50b747de07aa (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.java | 58 |
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); + } } } |