aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java82
1 files changed, 79 insertions, 3 deletions
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 2c4a017c46..a99faa5152 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
@@ -13,11 +13,16 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import com.google.common.collect.ImmutableCollection;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.rules.SkylarkApiProvider;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import javax.annotation.Nullable;
+
/**
* A class that exposes the Android providers to Skylark. It is intended to provide a
* simple and stable interface for Skylark users.
@@ -30,6 +35,8 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
/** The name of the field in Skylark used to access this class. */
public static final String NAME = "android";
+ private final IdlInfo idlInfo = new IdlInfo();
+
@SkylarkCallable(
name = "apk",
structField = true,
@@ -37,7 +44,11 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
doc = "Returns an APK produced by this target."
)
public Artifact getApk() {
- return getInfo().getProvider(AndroidIdeInfoProvider.class).getSignedApk();
+ return getIdeInfoProvider().getSignedApk();
+ }
+
+ private AndroidIdeInfoProvider getIdeInfoProvider() {
+ return getInfo().getProvider(AndroidIdeInfoProvider.class);
}
@SkylarkCallable(
@@ -47,7 +58,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
doc = "Returns a java package for this target."
)
public String getJavaPackage() {
- return getInfo().getProvider(AndroidIdeInfoProvider.class).getJavaPackage();
+ return getIdeInfoProvider().getJavaPackage();
}
@SkylarkCallable(
@@ -57,6 +68,71 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
doc = "Returns a manifest file for this target."
)
public Artifact getManifest() {
- return getInfo().getProvider(AndroidIdeInfoProvider.class).getManifest();
+ return getIdeInfoProvider().getManifest();
+ }
+
+ @SkylarkCallable(
+ name = "apks_under_test",
+ structField = true,
+ allowReturnNones = true,
+ doc = "Returns a collection of APKs that this target tests."
+ )
+ public ImmutableCollection<Artifact> getApksUnderTest() {
+ return getIdeInfoProvider().getApksUnderTest();
+ }
+
+
+ @SkylarkCallable(
+ name = "idl",
+ structField = true,
+ doc = "Returns information about IDL files associated with this target."
+ )
+ public IdlInfo getIdlInfo() {
+ return idlInfo;
+ }
+
+ /**
+ * Helper class to provide information about IDLs related to this rule.
+ */
+ @SkylarkModule(
+ name = "AndroidSkylarkIdlInfo",
+ doc = "Provides access to information about Android rules"
+ )
+ public class IdlInfo {
+ @SkylarkCallable(
+ name = "sources",
+ structField = true,
+ doc = "Returns a list of IDL files."
+ )
+ public ImmutableCollection<Artifact> getSources() {
+ return getIdeInfoProvider().getIdlSrcs();
+ }
+ @SkylarkCallable(
+ name = "generated_java_files",
+ structField = true,
+ doc = "Returns a list Java files generated from IDL sources."
+ )
+ public ImmutableCollection<Artifact> getIdlGeneratedJavaFiles() {
+ return getIdeInfoProvider().getIdlGeneratedJavaFiles();
+ }
+
+ @SkylarkCallable(
+ name = "output",
+ structField = true,
+ allowReturnNones = true,
+ doc = "Returns a jar file for classes generated from IDL sources."
+ )
+ @Nullable
+ public JavaRuleOutputJarsProvider.OutputJar getIdlOutput() {
+ if (getIdeInfoProvider().getIdlClassJar() == null) {
+ return null;
+ }
+
+ return new OutputJar(
+ getIdeInfoProvider().getIdlClassJar(),
+ null,
+ getIdeInfoProvider().getIdlSourceJar()
+ );
+ }
}
}