aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-07-20 11:54:25 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-20 11:56:09 -0700
commit32487d72c521919e309e2fdd27eedcfc8c829c7d (patch)
treef5cf37397dc4f53921b923a0b3070b6b31b4a956 /src/main/java/com/google/devtools/build/lib/rules/android
parentef483ee54cbe884119500f68cc070baadfaf4383 (diff)
Automated rollback of commit 64ea3cd90e1ead5ece533ee5a3cb4ee3520527fb.
*** Reason for rollback *** Update the Flutter rules AndroidSdkInfo provider to FlutterAndroidSdkInfo. AndroidSdkInfo should be unique in the repo now. *** Original change description *** Automated rollback of commit 4d10250291a813302de64151be3b22d57e94749d. *** Reason for rollback *** AndroidSdkInfo is already being used by the Flutter rules. *** Original change description *** Expose AndroidSdkProvider to Skylark (as AndroidSdkInfo). RELNOTES: None. PiperOrigin-RevId: 205431461
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java212
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java9
4 files changed, 175 insertions, 54 deletions
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 ae481f97c1..9a6e14afb5 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
@@ -472,7 +472,8 @@ public final class AndroidRuleClasses {
.useOutputLicenses()
.allowedRuleClasses("java_toolchain")
.value(JavaSemantics.javaToolchainAttribute(environment)))
- .advertiseProvider(AndroidSdkProvider.class)
+ .advertiseSkylarkProvider(
+ SkylarkProviderIdentifier.forKey(AndroidSdkProvider.PROVIDER.getKey()))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java
index 6ba38ddb12..768e81ac97 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java
@@ -68,9 +68,8 @@ public class AndroidSdk implements RuleConfiguredTargetFactory {
}
return new RuleConfiguredTargetBuilder(ruleContext)
- .addProvider(
- AndroidSdkProvider.class,
- AndroidSdkProvider.create(
+ .addNativeDeclaredProvider(
+ new AndroidSdkProvider(
buildToolsVersion,
frameworkAidl,
aidlLib,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
index 699a870283..da40eb913f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
@@ -13,23 +13,48 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
-import com.google.auto.value.AutoValue;
+import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable;
+
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSdkProviderApi;
+import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
/** Description of the tools Blaze needs from an Android SDK. */
-@AutoValue
@Immutable
-public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
-
- public static AndroidSdkProvider create(
+public final class AndroidSdkProvider extends NativeInfo
+ implements AndroidSdkProviderApi<Artifact, FilesToRunProvider, TransitiveInfoCollection> {
+
+ public static final String PROVIDER_NAME = "AndroidSdkInfo";
+ public static final Provider PROVIDER = new Provider();
+
+ private final String buildToolsVersion;
+ private final Artifact frameworkAidl;
+ private final TransitiveInfoCollection aidlLib;
+ private final Artifact androidJar;
+ private final Artifact sourceProperties;
+ private final Artifact shrinkedAndroidJar;
+ private final Artifact mainDexClasses;
+ private final FilesToRunProvider adb;
+ private final FilesToRunProvider dx;
+ private final FilesToRunProvider mainDexListCreator;
+ private final FilesToRunProvider aidl;
+ private final FilesToRunProvider aapt;
+ private final FilesToRunProvider aapt2;
+ private final FilesToRunProvider apkBuilder;
+ private final FilesToRunProvider apkSigner;
+ private final FilesToRunProvider proguard;
+ private final FilesToRunProvider zipalign;
+
+ public AndroidSdkProvider(
String buildToolsVersion,
Artifact frameworkAidl,
@Nullable TransitiveInfoCollection aidlLib,
@@ -47,25 +72,24 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
FilesToRunProvider apkSigner,
FilesToRunProvider proguard,
FilesToRunProvider zipalign) {
-
- return new AutoValue_AndroidSdkProvider(
- buildToolsVersion,
- frameworkAidl,
- aidlLib,
- androidJar,
- sourceProperties,
- shrinkedAndroidJar,
- mainDexClasses,
- adb,
- dx,
- mainDexListCreator,
- aidl,
- aapt,
- aapt2,
- apkBuilder,
- apkSigner,
- proguard,
- zipalign);
+ super(PROVIDER);
+ this.buildToolsVersion = buildToolsVersion;
+ this.frameworkAidl = frameworkAidl;
+ this.aidlLib = aidlLib;
+ this.androidJar = androidJar;
+ this.sourceProperties = sourceProperties;
+ this.shrinkedAndroidJar = shrinkedAndroidJar;
+ this.mainDexClasses = mainDexClasses;
+ this.adb = adb;
+ this.dx = dx;
+ this.mainDexListCreator = mainDexListCreator;
+ this.aidl = aidl;
+ this.aapt = aapt;
+ this.aapt2 = aapt2;
+ this.apkBuilder = apkBuilder;
+ this.apkSigner = apkSigner;
+ this.proguard = proguard;
+ this.zipalign = zipalign;
}
/**
@@ -73,7 +97,7 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
* not specified.
*/
public static AndroidSdkProvider fromRuleContext(RuleContext ruleContext) {
- return ruleContext.getPrerequisite(":android_sdk", Mode.TARGET, AndroidSdkProvider.class);
+ return ruleContext.getPrerequisite(":android_sdk", Mode.TARGET, AndroidSdkProvider.PROVIDER);
}
/** Throws an error if the Android SDK cannot be found. */
@@ -84,44 +108,142 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
}
}
- /** The value of build_tools_version. May be null or empty. */
- public abstract String getBuildToolsVersion();
+ @Override
+ public String getBuildToolsVersion() {
+ return buildToolsVersion;
+ }
- public abstract Artifact getFrameworkAidl();
+ @Override
+ public Artifact getFrameworkAidl() {
+ return frameworkAidl;
+ }
+ @Override
@Nullable
- public abstract TransitiveInfoCollection getAidlLib();
+ public TransitiveInfoCollection getAidlLib() {
+ return aidlLib;
+ }
- public abstract Artifact getAndroidJar();
+ @Override
+ public Artifact getAndroidJar() {
+ return androidJar;
+ }
+ @Override
@Nullable
- public abstract Artifact getSourceProperties();
+ public Artifact getSourceProperties() {
+ return sourceProperties;
+ }
- public abstract Artifact getShrinkedAndroidJar();
+ @Override
+ public Artifact getShrinkedAndroidJar() {
+ return shrinkedAndroidJar;
+ }
- public abstract Artifact getMainDexClasses();
+ @Override
+ public Artifact getMainDexClasses() {
+ return mainDexClasses;
+ }
- public abstract FilesToRunProvider getAdb();
+ @Override
+ public FilesToRunProvider getAdb() {
+ return adb;
+ }
- public abstract FilesToRunProvider getDx();
+ @Override
+ public FilesToRunProvider getDx() {
+ return dx;
+ }
- public abstract FilesToRunProvider getMainDexListCreator();
+ @Override
+ public FilesToRunProvider getMainDexListCreator() {
+ return mainDexListCreator;
+ }
- public abstract FilesToRunProvider getAidl();
+ @Override
+ public FilesToRunProvider getAidl() {
+ return aidl;
+ }
- public abstract FilesToRunProvider getAapt();
+ @Override
+ public FilesToRunProvider getAapt() {
+ return aapt;
+ }
+ @Override
@Nullable
- public abstract FilesToRunProvider getAapt2();
+ public FilesToRunProvider getAapt2() {
+ return aapt2;
+ }
+ @Override
@Nullable
- public abstract FilesToRunProvider getApkBuilder();
+ public FilesToRunProvider getApkBuilder() {
+ return apkBuilder;
+ }
+
+ @Override
+ public FilesToRunProvider getApkSigner() {
+ return apkSigner;
+ }
- public abstract FilesToRunProvider getApkSigner();
+ @Override
+ public FilesToRunProvider getProguard() {
+ return proguard;
+ }
+
+ @Override
+ public FilesToRunProvider getZipalign() {
+ return zipalign;
+ }
- public abstract FilesToRunProvider getProguard();
+ /** The provider can construct the Android SDK provider. */
+ public static class Provider extends BuiltinProvider<AndroidSdkProvider>
+ implements AndroidSdkProviderApi.Provider<
+ Artifact, FilesToRunProvider, TransitiveInfoCollection> {
- public abstract FilesToRunProvider getZipalign();
+ private Provider() {
+ super(PROVIDER_NAME, AndroidSdkProvider.class);
+ }
- AndroidSdkProvider() {}
+ @Override
+ public AndroidSdkProvider createInfo(
+ String buildToolsVersion,
+ Artifact frameworkAidl,
+ Object aidlLib,
+ Artifact androidJar,
+ Object sourceProperties,
+ Artifact shrinkedAndroidJar,
+ Artifact mainDexClasses,
+ FilesToRunProvider adb,
+ FilesToRunProvider dx,
+ FilesToRunProvider mainDexListCreator,
+ FilesToRunProvider aidl,
+ FilesToRunProvider aapt,
+ Object aapt2,
+ Object apkBuilder,
+ FilesToRunProvider apkSigner,
+ FilesToRunProvider proguard,
+ FilesToRunProvider zipalign)
+ throws EvalException {
+ return new AndroidSdkProvider(
+ buildToolsVersion,
+ frameworkAidl,
+ fromNoneable(aidlLib, TransitiveInfoCollection.class),
+ androidJar,
+ fromNoneable(sourceProperties, Artifact.class),
+ shrinkedAndroidJar,
+ mainDexClasses,
+ adb,
+ dx,
+ mainDexListCreator,
+ aidl,
+ aapt,
+ fromNoneable(aapt2, FilesToRunProvider.class),
+ fromNoneable(apkBuilder, FilesToRunProvider.class),
+ apkSigner,
+ proguard,
+ zipalign);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
index 400bb2384e..c954a9fa9e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -136,14 +136,14 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu
.requireSkylarkProviders(forKey(JavaInfo.PROVIDER.getKey()))
// Latch onto Skylark toolchains in case they have a "runtime" (b/78647825)
.requireSkylarkProviders(forKey(ToolchainInfo.PROVIDER.getKey()))
+ // For android_sdk rules, where we just want to get at aidl runtime deps.
+ .requireSkylarkProviders(forKey(AndroidSdkProvider.PROVIDER.getKey()))
.requireProviderSets(
ImmutableList.of(
ImmutableSet.<Class<?>>of(ProtoSourcesProvider.class),
// For proto_lang_toolchain rules, where we just want to get at their runtime
// deps.
- ImmutableSet.<Class<?>>of(ProtoLangToolchainProvider.class),
- // For android_sdk rules, where we just want to get at aidl runtime deps.
- ImmutableSet.<Class<?>>of(AndroidSdkProvider.class)))
+ ImmutableSet.<Class<?>>of(ProtoLangToolchainProvider.class)))
// Parse labels since we don't have RuleDefinitionEnvironment.getLabel like in a rule
.add(
attr(ASPECT_DESUGAR_PREREQ, LABEL)
@@ -345,8 +345,7 @@ public final class DexArchiveAspect extends NativeAspectClass implements Configu
if (compilationInfo == null || compilationInfo.getBootClasspath().isEmpty()) {
return ImmutableList.of(
ruleContext
- .getPrerequisite(":dex_archive_android_sdk", Mode.TARGET)
- .getProvider(AndroidSdkProvider.class)
+ .getPrerequisite(":dex_archive_android_sdk", Mode.TARGET, AndroidSdkProvider.PROVIDER)
.getAndroidJar());
}
return compilationInfo.getBootClasspath();