diff options
author | asteinb <asteinb@google.com> | 2018-05-31 13:52:03 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-05-31 13:53:18 -0700 |
commit | d3c3ea70845389168428f04d544c9441df96c6da (patch) | |
tree | 449c53baab38bb96e4e58da9a000f04c05136108 | |
parent | 8d772dd9f9cb18ff3457d47d4714bce27da1684f (diff) |
Migrate remaining Android Skylark API to skylarkbuildapi
I don't know much about most of this code, but there should be no functional
changes.
RELNOTES: none
PiperOrigin-RevId: 198773657
22 files changed, 599 insertions, 290 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index 77e2a87ec9..2d41d78d29 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -37,8 +37,7 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode; import com.google.devtools.build.lib.rules.cpp.CppOptions.DynamicModeConverter; import com.google.devtools.build.lib.rules.cpp.CppOptions.LibcTopLabelConverter; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidConfigurationApi; import com.google.devtools.common.options.Converters; import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.Option; @@ -50,13 +49,9 @@ import javax.annotation.Nullable; /** Configuration fragment for Android rules. */ @AutoCodec -@SkylarkModule( - name = "android", - doc = "A configuration fragment for Android.", - category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT -) @Immutable -public class AndroidConfiguration extends BuildConfiguration.Fragment { +public class AndroidConfiguration extends BuildConfiguration.Fragment + implements AndroidConfigurationApi { /** * Converter for {@link * com.google.devtools.build.lib.rules.android.AndroidConfiguration.ConfigurationDistinguisher} @@ -1069,11 +1064,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { } @SkylarkConfigurationField( - name = "android_sdk_label", - doc = "Returns the target denoted by the value of the --android_sdk flag", - defaultLabel = AndroidRuleClasses.DEFAULT_SDK, - defaultInToolRepository = true - ) + name = "android_sdk_label", + doc = "Returns the target denoted by the value of the --android_sdk flag", + defaultLabel = AndroidRuleClasses.DEFAULT_SDK, + defaultInToolRepository = true) public Label getSdk() { return sdk; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java index 840d5026d0..ac8c3c9714 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java @@ -18,15 +18,15 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; 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.skylarkbuildapi.android.AndroidDeviceBrokerInfoApi; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; /** Supplies the device broker type string, passed to the Android test runtime. */ -@SkylarkModule(name = "AndroidDeviceBrokerInfo", doc = "", documented = false) @Immutable -public final class AndroidDeviceBrokerInfo extends NativeInfo { +public final class AndroidDeviceBrokerInfo extends NativeInfo + implements AndroidDeviceBrokerInfoApi { private static final String SKYLARK_NAME = "AndroidDeviceBrokerInfo"; private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE = diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java index 357be65a8b..4ebb089da1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java @@ -18,7 +18,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; 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.skylarkbuildapi.android.AndroidDex2OatInfoApi; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -27,9 +27,8 @@ import com.google.devtools.build.lib.syntax.SkylarkType; * Supplies the pregenerate_oat_files_for_tests attribute of type boolean provided by android_device * rule. */ -@SkylarkModule(name = "AndroidDex2OatInfo", doc = "", documented = false) @Immutable -public final class AndroidDex2OatInfo extends NativeInfo { +public final class AndroidDex2OatInfo extends NativeInfo implements AndroidDex2OatInfoApi { private static final String SKYLARK_NAME = "AndroidDex2OatInfo"; private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE = diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java index 9dfe2ef2b7..00c3ed9b98 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java @@ -19,9 +19,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; -import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidInstrumentationInfoApi; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -29,13 +27,9 @@ import com.google.devtools.build.lib.syntax.SkylarkType; /** * A provider for targets that create Android instrumentations. Consumed by Android testing rules. */ - @SkylarkModule( - name = "AndroidInstrumentationInfo", - doc = "Android instrumentation and target APKs to run in a test", - category = SkylarkModuleCategory.PROVIDER -) @Immutable -public class AndroidInstrumentationInfo extends NativeInfo { +public class AndroidInstrumentationInfo extends NativeInfo + implements AndroidInstrumentationInfoApi<Artifact> { private static final String SKYLARK_NAME = "AndroidInstrumentationInfo"; private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE = @@ -50,7 +44,7 @@ public class AndroidInstrumentationInfo extends NativeInfo { "instrumentation_apk"), /*defaultValues=*/ null, /*types=*/ ImmutableList.of( - SkylarkType.of(Artifact.class), // target_apk + SkylarkType.of(Artifact.class), // target_apk SkylarkType.of(Artifact.class))); // instrumentation_apk public static final NativeProvider<AndroidInstrumentationInfo> PROVIDER = new NativeProvider<AndroidInstrumentationInfo>( @@ -72,20 +66,12 @@ public class AndroidInstrumentationInfo extends NativeInfo { this.instrumentationApk = instrumentationApk; } - @SkylarkCallable( - name = "target_apk", - doc = "Returns the target APK of the instrumentation test.", - structField = true - ) + @Override public Artifact getTargetApk() { return targetApk; } - @SkylarkCallable( - name = "instrumentation_apk", - doc = "Returns the instrumentation APK that should be executed.", - structField = true - ) + @Override public Artifact getInstrumentationApk() { return instrumentationApk; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java index e6804eee39..d73d302dcc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java @@ -20,8 +20,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; -import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidNativeLibsInfoApi; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; @@ -31,9 +30,9 @@ import com.google.devtools.build.lib.syntax.SkylarkType; * Provider of transitively available ZIPs of native libs that should be directly copied into the * APK. */ -@SkylarkModule(name = "AndroidNativeLibsInfo", doc = "", documented = false) @Immutable -public final class AndroidNativeLibsInfo extends NativeInfo { +public final class AndroidNativeLibsInfo extends NativeInfo + implements AndroidNativeLibsInfoApi<Artifact> { private static final String SKYLARK_NAME = "AndroidNativeLibsInfo"; private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE = @@ -65,11 +64,7 @@ public final class AndroidNativeLibsInfo extends NativeInfo { this.nativeLibs = nativeLibs; } - @SkylarkCallable( - name = "native_libs", - doc = "Returns the native libraries produced by the rule.", - structField = true - ) + @Override public NestedSet<Artifact> getNativeLibs() { return nativeLibs; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java index 186002296d..ed0e67da49 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidProguardInfo.java @@ -20,19 +20,18 @@ import com.google.devtools.build.lib.packages.BuiltinProvider; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.rules.java.ProguardLibrary; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; -import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidProguardInfoApi; /** - * A target that can provide local proguard specifications, returned by the - * {@link ProguardLibrary#collectLocalProguardSpecs()} method. - * <p> This class provides additional data, not available in the pure native - * {@link com.google.devtools.build.lib.rules.java.ProguardSpecProvider} provider. + * A target that can provide local proguard specifications, returned by the {@link + * ProguardLibrary#collectLocalProguardSpecs()} method. + * + * <p>This class provides additional data, not available in the pure native {@link + * com.google.devtools.build.lib.rules.java.ProguardSpecProvider} provider. */ @AutoCodec @Immutable -public class AndroidProguardInfo extends NativeInfo { - public static final String PROVIDER_NAME = "AndroidProguardInfo"; +public class AndroidProguardInfo extends NativeInfo implements AndroidProguardInfoApi<Artifact> { public static final Provider PROVIDER = new Provider(); private final ImmutableList<Artifact> localProguardSpecs; @@ -42,11 +41,7 @@ public class AndroidProguardInfo extends NativeInfo { this.localProguardSpecs = localProguardSpecs; } - @SkylarkCallable( - name = "local_proguard_specs", - structField = true, - doc = "Returns the local proguard specs defined by this target." - ) + @Override public ImmutableList<Artifact> getLocalProguardSpecs() { return localProguardSpecs; } @@ -58,14 +53,10 @@ public class AndroidProguardInfo extends NativeInfo { private Provider() { super(PROVIDER_NAME, AndroidProguardInfo.class); } + } - @SkylarkCallable( - name = PROVIDER_NAME, - doc = "The <code>AndroidProguardInfo</code> constructor.", - selfCall = true) - @SkylarkConstructor(objectType = AndroidProguardInfo.class) - public AndroidProguardInfo androidProguardInfo(ImmutableList<Artifact> localProguardSpecs) { - return new AndroidProguardInfo(localProguardSpecs); - } + @Override + public AndroidProguardInfo androidProguardInfo(ImmutableList<Artifact> localProguardSpecs) { + return new AndroidProguardInfo(localProguardSpecs); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index 3ed06c9807..cd39c8b33b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -60,8 +60,8 @@ import com.google.devtools.build.lib.rules.java.JavaRuleClasses; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.ProguardHelper; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSplitTransititionApi; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; -import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; @@ -206,9 +206,12 @@ public final class AndroidRuleClasses { } @AutoCodec - public static final SplitTransition ANDROID_SPLIT_TRANSITION = new AndroidSplitTransition(); + public static final AndroidSplitTransition ANDROID_SPLIT_TRANSITION = + new AndroidSplitTransition(); - private static final class AndroidSplitTransition implements SplitTransition, SkylarkValue { + /** Android Split configuration transition for properly handling native dependencies */ + public static final class AndroidSplitTransition + implements SplitTransition, AndroidSplitTransititionApi { private static void setCrosstoolToAndroid(BuildOptions output, BuildOptions input) { AndroidConfiguration.Options inputAndroidOptions = input.get(AndroidConfiguration.Options.class); @@ -375,79 +378,97 @@ public final class AndroidRuleClasses { // build_tools_version is assumed to be the latest version if omitted. .add(attr("build_tools_version", STRING)) // This is the Proguard that comes from the --proguard_top attribute. - .add(attr(":proguard", LABEL) - .cfg(HostTransition.INSTANCE) - .value(JavaSemantics.PROGUARD).exec()) + .add( + attr(":proguard", LABEL) + .cfg(HostTransition.INSTANCE) + .value(JavaSemantics.PROGUARD) + .exec()) // This is the Proguard in the BUILD file that contains the android_sdk rule. Used when // --proguard_top is not specified. - .add(attr("proguard", LABEL).mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) - .add(attr("aapt", LABEL).mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) - .add(attr("aapt2", LABEL) - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) - .add(attr("dx", LABEL).mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) + .add( + attr("proguard", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) + .add( + attr("aapt", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) + .add(attr("aapt2", LABEL).cfg(HostTransition.INSTANCE).allowedFileTypes(ANY_FILE).exec()) + .add( + attr("dx", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) .add( attr("main_dex_list_creator", LABEL) .mandatory() .cfg(HostTransition.INSTANCE) .allowedFileTypes(ANY_FILE) .exec()) - .add(attr("adb", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) - .add(attr("framework_aidl", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE)) - .add(attr("aidl", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) + .add( + attr("adb", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) + .add( + attr("framework_aidl", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE)) + .add( + attr("aidl", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) .add(attr("aidl_lib", LABEL).allowedFileTypes(JavaSemantics.JAR)) - .add(attr("android_jar", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(JavaSemantics.JAR)) + .add( + attr("android_jar", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(JavaSemantics.JAR)) // TODO(b/67903726): Make this attribute mandatory after updating all android_sdk rules. - .add(attr("source_properties", LABEL) - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE)) - .add(attr("shrinked_android_jar", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE)) - .add(attr("annotations_jar", LABEL) - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE)) - .add(attr("main_dex_classes", LABEL) - .mandatory().cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE)) - .add(attr("apkbuilder", LABEL) - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) - .add(attr("apksigner", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE) - .exec()) - .add(attr("zipalign", LABEL) - .mandatory() - .cfg(HostTransition.INSTANCE) - .allowedFileTypes(ANY_FILE).exec()) + .add( + attr("source_properties", LABEL) + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE)) + .add( + attr("shrinked_android_jar", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE)) + .add( + attr("annotations_jar", LABEL) + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE)) + .add( + attr("main_dex_classes", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE)) + .add( + attr("apkbuilder", LABEL) + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) + .add( + attr("apksigner", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) + .add( + attr("zipalign", LABEL) + .mandatory() + .cfg(HostTransition.INSTANCE) + .allowedFileTypes(ANY_FILE) + .exec()) .add( attr(":java_toolchain", LABEL) .useOutputLicenses() 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 c69902f324..c4b010385e 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 @@ -25,9 +25,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; 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 com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSkylarkApiProviderApi; import java.util.function.Function; import javax.annotation.Nullable; @@ -35,17 +33,9 @@ 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. */ -@SkylarkModule( - name = "AndroidSkylarkApiProvider", - title = "android", - category = SkylarkModuleCategory.PROVIDER, - doc = - "Provides access to information about Android rules. Every Android-related target provides " - + "this struct, accessible as a <code>android</code> field on a " - + "<a href=\"Target.html\">target</a>." -) @Immutable -public class AndroidSkylarkApiProvider extends SkylarkApiProvider { +public class AndroidSkylarkApiProvider extends SkylarkApiProvider + implements AndroidSkylarkApiProviderApi<Artifact> { /** The name of the field in Skylark used to access this class. */ public static final String NAME = "android"; @@ -56,12 +46,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { this.resourceInfo = resourceInfo; } - @SkylarkCallable( - name = "apk", - structField = true, - allowReturnNones = true, - doc = "Returns an APK produced by this target." - ) + @Override public Artifact getApk() { return getIdeInfoProvider().getSignedApk(); } @@ -70,111 +55,58 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { return getInfo().getProvider(AndroidIdeInfoProvider.class); } - @SkylarkCallable( - name = "java_package", - structField = true, - allowReturnNones = true, - doc = "Returns a java package for this target." - ) + @Override public String getJavaPackage() { return getIdeInfoProvider().getJavaPackage(); } - @SkylarkCallable( - name = "manifest", - structField = true, - allowReturnNones = true, - doc = "Returns a manifest file for this target." - ) + @Override public Artifact getManifest() { return getIdeInfoProvider().getManifest(); } - @SkylarkCallable( - name = "merged_manifest", - structField = true, - allowReturnNones = true, - doc = "Returns a manifest file for this target after all processing, e.g.: merging, etc." - ) + @Override public Artifact getMergedManifest() { return getIdeInfoProvider().getGeneratedManifest(); } - @SkylarkCallable( - name = "native_libs", - structField = true, - doc = - "Returns the native libraries as a dictionary of the libraries' architecture as a string " - + "to a set of the native library files, or the empty dictionary if there are no " - + "native libraries." - ) + @Override public ImmutableMap<String, NestedSet<Artifact>> getNativeLibs() { return getIdeInfoProvider().getNativeLibs(); } - @SkylarkCallable( - name = "resource_apk", - structField = true, - doc = "Returns the resources container for the target." - ) + @Override public Artifact getResourceApk() { return getIdeInfoProvider().getResourceApk(); } - @SkylarkCallable( - name = "apks_under_test", - structField = true, - allowReturnNones = true, - doc = "Returns a collection of APKs that this target tests." - ) + @Override public ImmutableCollection<Artifact> getApksUnderTest() { return getIdeInfoProvider().getApksUnderTest(); } - @SkylarkCallable( - name = "defines_resources", - structField = true, - doc = "Returns <code>True</code> if the target defines any Android resources directly." - ) + @Override public boolean definesAndroidResources() { return getIdeInfoProvider().definesAndroidResources(); } - @SkylarkCallable( - name = "idl", - structField = true, - doc = "Returns information about IDL files associated with this target." - ) + @Override public IdlInfo getIdlInfo() { return idlInfo; } - @SkylarkCallable( - name = "resources", - structField = true, - doc = "Returns resources defined by this target." - ) + @Override public NestedSet<Artifact> getResources() { return collectDirectArtifacts(ValidatedAndroidData::getResources); } - @SkylarkCallable( - name = "resource_jar", - structField = true, - allowReturnNones = true, - doc = "Returns a jar file for classes generated from resources." - ) + @Override @Nullable public JavaRuleOutputJarsProvider.OutputJar getResourceJar() { return getIdeInfoProvider().getResourceJar(); } - @SkylarkCallable( - name = "aar", - structField = true, - allowReturnNones = true, - doc = "Returns the aar output of this target." - ) + @Override public Artifact getAar() { return getIdeInfoProvider().getAar(); } @@ -194,43 +126,24 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider { } /** Helper class to provide information about IDLs related to this rule. */ - @SkylarkModule( - name = "AndroidSkylarkIdlInfo", - category = SkylarkModuleCategory.NONE, - doc = "Provides access to information about Android rules." - ) @Immutable - public class IdlInfo { - @SkylarkCallable( - name = "import_root", - structField = true, - allowReturnNones = true, - doc = "Returns the root of IDL packages if not the java root." - ) + public class IdlInfo implements IdlInfoApi<Artifact> { + @Override public String getImportRoot() { return getIdeInfoProvider().getIdlImportRoot(); } - @SkylarkCallable(name = "sources", structField = true, doc = "Returns a list of IDL files.") + @Override public ImmutableCollection<Artifact> getSources() { return getIdeInfoProvider().getIdlSrcs(); } - @SkylarkCallable( - name = "generated_java_files", - structField = true, - doc = "Returns a list Java files generated from IDL sources." - ) + @Override 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." - ) + @Override @Nullable public JavaRuleOutputJarsProvider.OutputJar getIdlOutput() { if (getIdeInfoProvider().getIdlClassJar() == null) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java index 7bcf8f35ff..fd02d258e0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java @@ -14,49 +14,25 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition; -import com.google.devtools.build.lib.skylarkinterface.Param; -import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSkylarkCommonApi; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSplitTransititionApi; import com.google.devtools.build.lib.vfs.PathFragment; /** Common utilities for Skylark rules related to Android. */ -@SkylarkModule( - name = "android_common", - doc = "Common utilities and functionality related to Android rules." -) -public class AndroidSkylarkCommon { +public class AndroidSkylarkCommon implements AndroidSkylarkCommonApi<Artifact> { - @SkylarkCallable( - name = "create_device_broker_info", - documented = false, - parameters = {@Param(name = "type", type = String.class)} - ) + @Override public AndroidDeviceBrokerInfo createDeviceBrokerInfo(String deviceBrokerType) { return new AndroidDeviceBrokerInfo(deviceBrokerType); } - @SkylarkCallable( - name = "resource_source_directory", - allowReturnNones = true, - doc = - "Returns a source directory for Android resource file. " - + "The source directory is a prefix of resource's relative path up to " - + "a directory that designates resource kind (cf. " - + "http://developer.android.com/guide/topics/resources/providing-resources.html)." - ) + @Override public PathFragment getSourceDirectoryRelativePathFromResource(Artifact resource) { return AndroidCommon.getSourceDirectoryRelativePathFromResource(resource); } - @SkylarkCallable( - name = "multi_cpu_configuration", - doc = - "A configuration for rule attributes that compiles native code according to " - + "the --fat_apk_cpu and --android_crosstool_top flags.", - structField = true - ) - public SplitTransition getAndroidSplitTransition() { + @Override + public AndroidSplitTransititionApi getAndroidSplitTransition() { return AndroidRuleClasses.ANDROID_SPLIT_TRANSITION; } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java index 0e2556f672..de7841dc57 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java @@ -17,19 +17,12 @@ import com.google.devtools.build.lib.actions.Artifact; 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.SkylarkCallable; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkbuildapi.android.ApkInfoApi; import javax.annotation.Nullable; /** A provider for targets that produce an apk file. */ -@SkylarkModule( - name = "ApkInfo", - doc = "APKs provided by a rule", - category = SkylarkModuleCategory.PROVIDER -) @Immutable -public class ApkInfo extends NativeInfo { +public class ApkInfo extends NativeInfo implements ApkInfoApi<Artifact> { private static final String SKYLARK_NAME = "ApkInfo"; public static final NativeProvider<ApkInfo> PROVIDER = @@ -56,13 +49,7 @@ public class ApkInfo extends NativeInfo { this.keystore = keystore; } - /** Returns the APK file built in the transitive closure. */ - @SkylarkCallable( - name = "signed_apk", - doc = "Returns a signed APK built from the target.", - structField = true - - ) + @Override public Artifact getApk() { return apk; } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java new file mode 100644 index 0000000000..abc026c647 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidConfigurationApi.java @@ -0,0 +1,24 @@ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** Configuration fragment for Android rules. */ +@SkylarkModule( + name = "android", + doc = "A configuration fragment for Android.", + category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT) +public interface AndroidConfigurationApi {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDeviceBrokerInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDeviceBrokerInfoApi.java new file mode 100644 index 0000000000..51c22729b2 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDeviceBrokerInfoApi.java @@ -0,0 +1,21 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; + +/** Supplies the device broker type string, passed to the Android test runtime. */ +@SkylarkModule(name = "AndroidDeviceBrokerInfo", doc = "", documented = false) +public interface AndroidDeviceBrokerInfoApi extends StructApi {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDex2OatInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDex2OatInfoApi.java new file mode 100644 index 0000000000..c1415a6805 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDex2OatInfoApi.java @@ -0,0 +1,24 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; + +/** + * Supplies the pregenerate_oat_files_for_tests attribute of type boolean provided by android_device + * rule. + */ +@SkylarkModule(name = "AndroidDex2OatInfo", doc = "", documented = false) +public interface AndroidDex2OatInfoApi extends StructApi {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidInstrumentationInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidInstrumentationInfoApi.java new file mode 100644 index 0000000000..2022024551 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidInstrumentationInfoApi.java @@ -0,0 +1,42 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** + * A provider for targets that create Android instrumentations. Consumed by Android testing rules. + */ +@SkylarkModule( + name = "AndroidInstrumentationInfo", + doc = "Android instrumentation and target APKs to run in a test", + category = SkylarkModuleCategory.PROVIDER) +public interface AndroidInstrumentationInfoApi<FileT extends FileApi> extends StructApi { + + @SkylarkCallable( + name = "target_apk", + doc = "Returns the target APK of the instrumentation test.", + structField = true) + FileT getTargetApk(); + + @SkylarkCallable( + name = "instrumentation_apk", + doc = "Returns the instrumentation APK that should be executed.", + structField = true) + FileT getInstrumentationApk(); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java new file mode 100644 index 0000000000..6e1c154258 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java @@ -0,0 +1,34 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; + +/** + * Provider of transitively available ZIPs of native libs that should be directly copied into the + * APK. + */ +@SkylarkModule(name = "AndroidNativeLibsInfo", doc = "", documented = false) +public interface AndroidNativeLibsInfoApi<FileT extends FileApi> extends StructApi { + + @SkylarkCallable( + name = "native_libs", + doc = "Returns the native libraries produced by the rule.", + structField = true) + NestedSet<FileT> getNativeLibs(); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidProguardInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidProguardInfoApi.java new file mode 100644 index 0000000000..4750a51241 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidProguardInfoApi.java @@ -0,0 +1,40 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; + +/** A target that can provide local proguard specifications. */ +@SkylarkModule(name = "AndroidProguardInfo", doc = "", documented = false) +public interface AndroidProguardInfoApi<FileT extends FileApi> extends StructApi { + String PROVIDER_NAME = "AndroidProguardInfo"; + + @SkylarkCallable( + name = "local_proguard_specs", + structField = true, + doc = "Returns the local proguard specs defined by this target.") + ImmutableList<FileT> getLocalProguardSpecs(); + + @SkylarkCallable( + name = PROVIDER_NAME, + doc = "The <code>AndroidProguardInfo</code> constructor.", + selfCall = true) + @SkylarkConstructor(objectType = AndroidProguardInfoApi.class) + AndroidProguardInfoApi<FileT> androidProguardInfo(ImmutableList<FileT> localProguardSpecs); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java new file mode 100644 index 0000000000..d86d5a0fab --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java @@ -0,0 +1,153 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.java.OutputJarApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +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. + */ +@SkylarkModule( + name = "AndroidSkylarkApiProvider", + title = "android", + category = SkylarkModuleCategory.PROVIDER, + doc = + "Provides access to information about Android rules. Every Android-related target provides " + + "this struct, accessible as a <code>android</code> field on a " + + "<a href=\"Target.html\">target</a>.") +public interface AndroidSkylarkApiProviderApi<FileT extends FileApi> { + + @SkylarkCallable( + name = "apk", + structField = true, + allowReturnNones = true, + doc = "Returns an APK produced by this target.") + FileT getApk(); + + @SkylarkCallable( + name = "java_package", + structField = true, + allowReturnNones = true, + doc = "Returns a java package for this target.") + String getJavaPackage(); + + @SkylarkCallable( + name = "manifest", + structField = true, + allowReturnNones = true, + doc = "Returns a manifest file for this target.") + FileT getManifest(); + + @SkylarkCallable( + name = "merged_manifest", + structField = true, + allowReturnNones = true, + doc = "Returns a manifest file for this target after all processing, e.g.: merging, etc.") + FileT getMergedManifest(); + + @SkylarkCallable( + name = "native_libs", + structField = true, + doc = + "Returns the native libraries as a dictionary of the libraries' architecture as a string " + + "to a set of the native library files, or the empty dictionary if there are no " + + "native libraries.") + ImmutableMap<String, NestedSet<FileT>> getNativeLibs(); + + @SkylarkCallable( + name = "resource_apk", + structField = true, + doc = "Returns the resources container for the target.") + FileT getResourceApk(); + + @SkylarkCallable( + name = "apks_under_test", + structField = true, + allowReturnNones = true, + doc = "Returns a collection of APKs that this target tests.") + ImmutableCollection<FileT> getApksUnderTest(); + + @SkylarkCallable( + name = "defines_resources", + structField = true, + doc = "Returns <code>True</code> if the target defines any Android resources directly.") + boolean definesAndroidResources(); + + @SkylarkCallable( + name = "idl", + structField = true, + doc = "Returns information about IDL files associated with this target.") + IdlInfoApi<FileT> getIdlInfo(); + + @SkylarkCallable( + name = "resources", + structField = true, + doc = "Returns resources defined by this target.") + NestedSet<FileT> getResources(); + + @SkylarkCallable( + name = "resource_jar", + structField = true, + allowReturnNones = true, + doc = "Returns a jar file for classes generated from resources.") + @Nullable + OutputJarApi<FileT> getResourceJar(); + + @SkylarkCallable( + name = "aar", + structField = true, + allowReturnNones = true, + doc = "Returns the aar output of this target.") + FileT getAar(); + + /** Helper class to provide information about IDLs related to this rule. */ + @SkylarkModule( + name = "AndroidSkylarkIdlInfo", + category = SkylarkModuleCategory.NONE, + doc = "Provides access to information about Android rules.") + interface IdlInfoApi<FileT extends FileApi> { + @SkylarkCallable( + name = "import_root", + structField = true, + allowReturnNones = true, + doc = "Returns the root of IDL packages if not the java root.") + String getImportRoot(); + + @SkylarkCallable(name = "sources", structField = true, doc = "Returns a list of IDL files.") + ImmutableCollection<FileT> getSources(); + + @SkylarkCallable( + name = "generated_java_files", + structField = true, + doc = "Returns a list Java files generated from IDL sources.") + ImmutableCollection<FileT> getIdlGeneratedJavaFiles(); + + @SkylarkCallable( + name = "output", + structField = true, + allowReturnNones = true, + doc = "Returns a jar file for classes generated from IDL sources.") + @Nullable + OutputJarApi<FileT> getIdlOutput(); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java new file mode 100644 index 0000000000..8ce6f621a1 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java @@ -0,0 +1,51 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.vfs.PathFragment; + +/** Common utilities for Skylark rules related to Android. */ +@SkylarkModule( + name = "android_common", + doc = "Common utilities and functionality related to Android rules.") +public interface AndroidSkylarkCommonApi<FileT extends FileApi> { + + @SkylarkCallable( + name = "create_device_broker_info", + documented = false, + parameters = {@Param(name = "type", type = String.class)}) + AndroidDeviceBrokerInfoApi createDeviceBrokerInfo(String deviceBrokerType); + + @SkylarkCallable( + name = "resource_source_directory", + allowReturnNones = true, + doc = + "Returns a source directory for Android resource file. " + + "The source directory is a prefix of resource's relative path up to " + + "a directory that designates resource kind (cf. " + + "http://developer.android.com/guide/topics/resources/providing-resources.html).") + PathFragment getSourceDirectoryRelativePathFromResource(FileT resource); + + @SkylarkCallable( + name = "multi_cpu_configuration", + doc = + "A configuration for rule attributes that compiles native code according to " + + "the --fat_apk_cpu and --android_crosstool_top flags.", + structField = true) + AndroidSplitTransititionApi getAndroidSplitTransition(); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSplitTransititionApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSplitTransititionApi.java new file mode 100644 index 0000000000..ef4286e644 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSplitTransititionApi.java @@ -0,0 +1,21 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; + +/** Android configuration for properly handling native dependencies */ +@SkylarkModule(name = "android_split_transition", doc = "") +public interface AndroidSplitTransititionApi extends SkylarkValue {} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ApkInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ApkInfoApi.java new file mode 100644 index 0000000000..b279e87170 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/ApkInfoApi.java @@ -0,0 +1,34 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; + +/** A provider for targets that produce an apk file. */ +@SkylarkModule( + name = "ApkInfo", + doc = "APKs provided by a rule", + category = SkylarkModuleCategory.PROVIDER) +public interface ApkInfoApi<FileT extends FileApi> extends StructApi { + /** Returns the APK file built in the transitive closure. */ + @SkylarkCallable( + name = "signed_apk", + doc = "Returns a signed APK built from the target.", + structField = true) + FileT getApk(); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD index 0f91d61a2f..6829345752 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD @@ -22,7 +22,10 @@ java_library( "//src/main/java/com/google/devtools/build/lib:events", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:syntax", + "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi", + "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java", + "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", "//third_party:guava", "//third_party:jsr305", ], diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD index 7c5169569a..59948ecfe6 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/BUILD @@ -6,7 +6,7 @@ # those which contain pure-Skylark concepts, such as the interpreter or # annotation interfaces). -package(default_visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"]) +package(default_visibility = ["//src:__subpackages__"]) licenses(["notice"]) # Apache 2.0 |