aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-07-16 13:51:09 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-16 13:52:37 -0700
commit83ddf681a8c5814283cb0c1d470a4c532f32fae4 (patch)
treeebd582c0167b50c12353e4ec72d008d0ec45a74d /src/main/java/com/google/devtools/build/lib/rules/android
parente6a2f609375312c4fb78507340644b2f75bf6c9e (diff)
AndroidIdeInfoProvider exposed to Skylark (as AndroidIdeInfo).
RELNOTES: None. PiperOrigin-RevId: 204801047
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java106
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java2
3 files changed, 92 insertions, 19 deletions
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 88128becae..5703def576 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
@@ -714,8 +714,7 @@ public class AndroidCommon {
JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext())
.addNativeDeclaredProvider(javaInfo)
.addProvider(RunfilesProvider.class, RunfilesProvider.simple(getRunfiles()))
- .addProvider(
- AndroidIdeInfoProvider.class,
+ .addNativeDeclaredProvider(
createAndroidIdeInfoProvider(
ruleContext,
idlHelper,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index 316c11d69c..59dc6414db 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -13,17 +13,24 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
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 com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidIdeInfoProviderApi;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkDict;
+import com.google.devtools.build.lib.syntax.SkylarkList;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Map;
@@ -32,7 +39,11 @@ import javax.annotation.Nullable;
/** An Android target provider to provide Android-specific info to IDEs. */
@Immutable
-public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
+public final class AndroidIdeInfoProvider extends NativeInfo
+ implements AndroidIdeInfoProviderApi<Artifact, OutputJar> {
+
+ public static final String PROVIDER_NAME = "AndroidIdeInfo";
+ public static final Provider PROVIDER = new Provider();
/** Builder for {@link AndroidIdeInfoProvider} */
public static class Builder {
@@ -172,7 +183,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
private final ImmutableCollection<Artifact> apksUnderTest;
private final ImmutableMap<String, NestedSet<Artifact>> nativeLibs;
- AndroidIdeInfoProvider(
+ public AndroidIdeInfoProvider(
String javaPackage,
String idlImportRoot,
@Nullable Artifact manifest,
@@ -188,6 +199,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
ImmutableCollection<Artifact> apksUnderTest,
ImmutableMap<String, NestedSet<Artifact>> nativeLibs,
Artifact resourceApk) {
+ super(PROVIDER);
this.javaPackage = javaPackage;
this.idlImportRoot = idlImportRoot;
this.manifest = manifest;
@@ -205,84 +217,146 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
this.resourceApk = resourceApk;
}
- /** Returns java package for this target. */
+ @Override
public String getJavaPackage() {
return javaPackage;
}
- /** Returns the direct AndroidManifest. */
+ @Override
@Nullable
public Artifact getManifest() {
return manifest;
}
- /** Returns the direct generated AndroidManifest. */
+ @Override
@Nullable
public Artifact getGeneratedManifest() {
return generatedManifest;
}
- /**
- * Returns true if the target defined Android resources. Exposes {@link
- * LocalResourceContainer#definesAndroidResources(AttributeMap)}
- */
+ @Override
public boolean definesAndroidResources() {
return this.definesAndroidResources;
}
+ @Override
@Nullable
public String getIdlImportRoot() {
return idlImportRoot;
}
- /** Returns the direct debug key signed apk, if there is one. */
+ @Override
@Nullable
public Artifact getSignedApk() {
return signedApk;
}
+ @Override
@Nullable
public Artifact getIdlClassJar() {
return idlClassJar;
}
+ @Override
@Nullable
public Artifact getIdlSourceJar() {
return idlSourceJar;
}
+ @Override
@Nullable
public OutputJar getResourceJar() {
return resourceJar;
}
+ @Override
@Nullable
public Artifact getAar() {
return aar;
}
+ @Override
@Nullable
public Artifact getResourceApk() {
return resourceApk;
}
- /** A list of sources from the "idl_srcs" attribute. */
+ @Override
public ImmutableCollection<Artifact> getIdlSrcs() {
return idlSrcs;
}
- /** A list of java files generated from the "idl_srcs" attribute. */
+ @Override
public ImmutableCollection<Artifact> getIdlGeneratedJavaFiles() {
return idlGeneratedJavaFiles;
}
- /** A list of the APKs related to the app under test, if any. */
+ @Override
public ImmutableCollection<Artifact> getApksUnderTest() {
return apksUnderTest;
}
- /** A map, keyed on architecture, of the native libs for the app, if any. */
public ImmutableMap<String, NestedSet<Artifact>> getNativeLibs() {
return nativeLibs;
}
+
+ @Override
+ public ImmutableMap<String, SkylarkNestedSet> getNativeLibsSkylark() {
+ ImmutableMap.Builder<String, SkylarkNestedSet> builder = ImmutableMap.builder();
+ for (Map.Entry<String, NestedSet<Artifact>> entry : getNativeLibs().entrySet()) {
+ builder.put(entry.getKey(), SkylarkNestedSet.of(Artifact.class, entry.getValue()));
+ }
+ return builder.build();
+ }
+
+ /** Provider class for {@link AndroidIdeInfoProvider} objects. */
+ public static class Provider extends BuiltinProvider<AndroidIdeInfoProvider>
+ implements AndroidIdeInfoProviderApi.Provider<Artifact, OutputJar> {
+ private Provider() {
+ super(PROVIDER_NAME, AndroidIdeInfoProvider.class);
+ }
+
+ @Override
+ public AndroidIdeInfoProvider createInfo(
+ String javaPackage,
+ Object manifest,
+ Object generatedManifest,
+ String idlImportRoot,
+ SkylarkList<Artifact> idlSrcs,
+ SkylarkList<Artifact> idlGeneratedJavaFiles,
+ Object idlSourceJar,
+ Object idlClassJar,
+ boolean definesAndroidResources,
+ Object resourceJar,
+ Artifact resourceApk,
+ Object signedApk,
+ Object aar,
+ SkylarkList<Artifact> apksUnderTest,
+ SkylarkDict<String, SkylarkNestedSet> nativeLibs)
+ throws EvalException {
+ Map<String, SkylarkNestedSet> nativeLibsMap =
+ nativeLibs.getContents(String.class, SkylarkNestedSet.class, "native_libs");
+
+ ImmutableMap.Builder<String, NestedSet<Artifact>> builder = ImmutableMap.builder();
+ for (Map.Entry<String, SkylarkNestedSet> entry : nativeLibsMap.entrySet()) {
+ builder.put(entry.getKey(), entry.getValue().getSet(Artifact.class));
+ }
+ return new AndroidIdeInfoProvider(
+ javaPackage,
+ idlImportRoot,
+ fromNoneable(manifest, Artifact.class),
+ fromNoneable(generatedManifest, Artifact.class),
+ fromNoneable(signedApk, Artifact.class),
+ fromNoneable(idlClassJar, Artifact.class),
+ fromNoneable(idlSourceJar, Artifact.class),
+ fromNoneable(resourceJar, OutputJar.class),
+ definesAndroidResources,
+ fromNoneable(aar, Artifact.class),
+ idlSrcs.getImmutableList(),
+ idlGeneratedJavaFiles.getImmutableList(),
+ apksUnderTest.getImmutableList(),
+ builder.build(),
+ resourceApk);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
index c4b010385e..34d8469f08 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
@@ -52,7 +52,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider
}
private AndroidIdeInfoProvider getIdeInfoProvider() {
- return getInfo().getProvider(AndroidIdeInfoProvider.class);
+ return getInfo().get(AndroidIdeInfoProvider.PROVIDER);
}
@Override