diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
10 files changed, 151 insertions, 289 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; } |