aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-07 13:18:48 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-07 13:20:04 -0700
commit1a48c210d8b6f1261fb52a32dc8f3705e7f9f87c (patch)
treeec53010e6e2697c4312e349e98146658e67d7181 /src
parent6f35d33c47f1a2fdbde31221883c0906c7bab800 (diff)
Make Aar provider into NativeInfo
This provider needs to be the new type so we can expose Aar information in Skylark RELNOTES: none PiperOrigin-RevId: 195710606
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java5
-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.java14
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(