diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java | 82 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java | 1 |
2 files changed, 80 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() + ); + } } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java index e83ad194a6..11d16fd2e8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java @@ -41,6 +41,7 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider name = "JavaOutput", doc = "Java classes jar, together with their associated source and interface archives" ) + @Immutable public static class OutputJar { @Nullable private final Artifact classJar; @Nullable private final Artifact iJar; |