diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java | 5 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java (renamed from src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarProvider.java) | 82 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java | 14 |
3 files changed, 72 insertions, 29 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 7587421bb3..bda835674c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -27,7 +27,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.TriState; -import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar; +import com.google.devtools.build.lib.rules.android.AndroidLibraryAarInfo.Aar; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; @@ -240,8 +240,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { AndroidLibraryResourceClassJarProvider.create(transitiveResourcesJars.build())); if (!JavaCommon.isNeverLink(ruleContext)) { - builder.addProvider( - AndroidLibraryAarProvider.class, aar.toProvider(ruleContext, definesLocalResources)); + builder.addNativeDeclaredProvider(aar.toProvider(ruleContext, definesLocalResources)); } return builder.build(); 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/AndroidLibraryAarInfo.java index 2cb9982f67..3f4fa051a9 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/AndroidLibraryAarInfo.java @@ -18,34 +18,81 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import java.util.Objects; import javax.annotation.Nullable; /** * A target that can provide the aar artifact of Android libraries and all the manifests that are * merged into the main aar manifest. */ -@AutoValue +@SkylarkModule( + name = "AndroidLibraryAarInfo", + doc = "Android AARs provided by a library rule and its dependencies", + category = SkylarkModuleCategory.PROVIDER) @Immutable -public abstract class AndroidLibraryAarProvider implements TransitiveInfoProvider { +public class AndroidLibraryAarInfo extends NativeInfo { + private static final String SKYLARK_NAME = "AndroidLibraryAarInfo"; + public static final NativeProvider<AndroidLibraryAarInfo> PROVIDER = + new NativeProvider<AndroidLibraryAarInfo>(AndroidLibraryAarInfo.class, SKYLARK_NAME) {}; - public static AndroidLibraryAarProvider create( + @Nullable private final Aar aar; + private final NestedSet<Aar> transitiveAars; + private final NestedSet<Artifact> transitiveAarArtifacts; + + private AndroidLibraryAarInfo( + @Nullable Aar aar, + NestedSet<Aar> transitiveAars, + NestedSet<Artifact> transitiveAarArtifacts) { + super(PROVIDER); + this.aar = aar; + this.transitiveAars = transitiveAars; + this.transitiveAarArtifacts = transitiveAarArtifacts; + } + + public static AndroidLibraryAarInfo create( @Nullable Aar aar, NestedSet<Aar> transitiveAars, NestedSet<Artifact> transitiveAarArtifacts) { - return new AutoValue_AndroidLibraryAarProvider(aar, transitiveAars, transitiveAarArtifacts); + return new AndroidLibraryAarInfo(aar, transitiveAars, transitiveAarArtifacts); } @Nullable - public abstract Aar getAar(); + public Aar getAar() { + return aar; + } + + public NestedSet<Aar> getTransitiveAars() { + return transitiveAars; + } + + public NestedSet<Artifact> getTransitiveAarArtifacts() { + return transitiveAarArtifacts; + } + + @Override + public int hashCode() { + return Objects.hash(aar, transitiveAars, transitiveAarArtifacts); + } - public abstract NestedSet<Aar> getTransitiveAars(); + @Override + public boolean equals(Object object) { + if (!(object instanceof AndroidLibraryAarInfo)) { + return false; + } - public abstract NestedSet<Artifact> getTransitiveAarArtifacts(); + AndroidLibraryAarInfo other = (AndroidLibraryAarInfo) object; + return Objects.equals(aar, other.aar) + && transitiveAars.equals(other.transitiveAars) + && transitiveAarArtifacts.equals(other.transitiveAarArtifacts); + } /** The .aar file and associated AndroidManifest.xml contributed by a single target. */ @AutoValue @@ -53,7 +100,7 @@ public abstract class AndroidLibraryAarProvider implements TransitiveInfoProvide public abstract static class Aar { @VisibleForTesting static Aar create(Artifact aar, Artifact manifest) { - return new AutoValue_AndroidLibraryAarProvider_Aar(aar, manifest); + return new AutoValue_AndroidLibraryAarInfo_Aar(aar, manifest); } static Aar makeAar( @@ -87,34 +134,31 @@ public abstract class AndroidLibraryAarProvider implements TransitiveInfoProvide Aar() {} - public AndroidLibraryAarProvider toProvider( + public AndroidLibraryAarInfo toProvider( RuleContext ruleContext, boolean definesLocalResources) { return toProvider( - AndroidCommon.getTransitivePrerequisites( - ruleContext, Mode.TARGET, AndroidLibraryAarProvider.class), + AndroidCommon.getTransitivePrerequisites(ruleContext, Mode.TARGET, PROVIDER), definesLocalResources); } - public AndroidLibraryAarProvider toProvider( - Iterable<AndroidLibraryAarProvider> depProviders, boolean definesLocalResources) { + public AndroidLibraryAarInfo toProvider( + Iterable<AndroidLibraryAarInfo> depProviders, boolean definesLocalResources) { NestedSetBuilder<Aar> aarBuilder = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Artifact> artifactBuilder = NestedSetBuilder.naiveLinkOrder(); - for (AndroidLibraryAarProvider depProvider : depProviders) { + for (AndroidLibraryAarInfo depProvider : depProviders) { aarBuilder.addTransitive(depProvider.getTransitiveAars()); artifactBuilder.addTransitive(depProvider.getTransitiveAarArtifacts()); } if (!definesLocalResources) { - return AndroidLibraryAarProvider.create(null, aarBuilder.build(), artifactBuilder.build()); + return AndroidLibraryAarInfo.create(null, aarBuilder.build(), artifactBuilder.build()); } aarBuilder.add(this); artifactBuilder.add(getAar()).add(getManifest()); - return AndroidLibraryAarProvider.create(this, aarBuilder.build(), artifactBuilder.build()); + return AndroidLibraryAarInfo.create(this, aarBuilder.build(), artifactBuilder.build()); } } - - AndroidLibraryAarProvider() {} } diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java index 4acc3483b2..bc06435f46 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java @@ -38,7 +38,7 @@ import com.google.devtools.build.lib.analysis.configuredtargets.OutputFileConfig import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar; +import com.google.devtools.build.lib.rules.android.AndroidLibraryAarInfo.Aar; import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationInfoProvider; import com.google.devtools.build.lib.rules.java.JavaCompileAction; @@ -1466,15 +1466,15 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { " srcs = ['libraryOne.java'])"); ConfiguredTarget target = getConfiguredTarget("//java/android:dummyLibraryOne"); - AndroidLibraryAarProvider provider = target.getProvider(AndroidLibraryAarProvider.class); + AndroidLibraryAarInfo provider = target.get(AndroidLibraryAarInfo.PROVIDER); assertThat(provider).isNotNull(); target = getConfiguredTarget("//java/android:dummyLibraryTwo"); - provider = target.getProvider(AndroidLibraryAarProvider.class); + provider = target.get(AndroidLibraryAarInfo.PROVIDER); assertThat(provider).isNull(); target = getConfiguredTarget("//java/android:dummyParentLibrary"); - provider = target.getProvider(AndroidLibraryAarProvider.class); + provider = target.get(AndroidLibraryAarInfo.PROVIDER); assertThat(provider).isNotNull(); assertThat(provider.getTransitiveAars()).hasSize(1); } @@ -1633,7 +1633,7 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { ConfiguredTarget target = getConfiguredTarget("//java/a:a"); - AndroidLibraryAarProvider provider = target.getProvider(AndroidLibraryAarProvider.class); + AndroidLibraryAarInfo provider = target.get(AndroidLibraryAarInfo.PROVIDER); assertThat(provider).isNotNull(); assertThat(provider .getAar() @@ -1864,7 +1864,7 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { " manifest = 'AndroidManifest.xml',", " resource_files = ['res/values/strings.xml'])"); ConfiguredTarget target = getConfiguredTarget("//java/android:test"); - final AndroidLibraryAarProvider provider = target.getProvider(AndroidLibraryAarProvider.class); + final AndroidLibraryAarInfo provider = target.get(AndroidLibraryAarInfo.PROVIDER); final Aar test = Aar.create( @@ -1892,7 +1892,7 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { " manifest = 'AndroidManifest.xml',", " resource_files = ['res/values/strings.xml'])"); ConfiguredTarget target = getConfiguredTarget("//java/android:test"); - final AndroidLibraryAarProvider provider = target.getProvider(AndroidLibraryAarProvider.class); + final AndroidLibraryAarInfo provider = target.get(AndroidLibraryAarInfo.PROVIDER); final Aar transitive = Aar.create( |