diff options
author | 2018-07-20 11:54:25 -0700 | |
---|---|---|
committer | 2018-07-20 11:56:09 -0700 | |
commit | 32487d72c521919e309e2fdd27eedcfc8c829c7d (patch) | |
tree | f5cf37397dc4f53921b923a0b3070b6b31b4a956 /src/main/java/com/google/devtools/build/lib/rules/android | |
parent | ef483ee54cbe884119500f68cc070baadfaf4383 (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')
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(); |