Add BootClassPathInfo field to AndroidSdkProvider
PiperOrigin-RevId: 300386532
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index ab874ee..62ea5b8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -465,13 +465,21 @@
classJar = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_CLASS_JAR);
idlHelper = new AndroidIdlHelper(ruleContext, classJar);
- NestedSetBuilder<Artifact> bootclasspath = NestedSetBuilder.<Artifact>stableOrder();
- if (getAndroidConfig(ruleContext).desugarJava8()) {
- bootclasspath.addTransitive(
- PrerequisiteArtifacts.nestedSet(
- ruleContext, "$desugar_java8_extra_bootclasspath", Mode.HOST));
+ BootClassPathInfo bootClassPathInfo;
+ AndroidSdkProvider androidSdkProvider = AndroidSdkProvider.fromRuleContext(ruleContext);
+ if (androidSdkProvider.getSystem() != null) {
+ bootClassPathInfo = androidSdkProvider.getSystem();
+ } else {
+ NestedSetBuilder<Artifact> bootclasspath = NestedSetBuilder.<Artifact>stableOrder();
+ if (getAndroidConfig(ruleContext).desugarJava8()) {
+ bootclasspath.addTransitive(
+ PrerequisiteArtifacts.nestedSet(
+ ruleContext, "$desugar_java8_extra_bootclasspath", Mode.HOST));
+ }
+ bootclasspath.add(androidSdkProvider.getAndroidJar());
+ bootClassPathInfo = BootClassPathInfo.create(bootclasspath.build());
}
- bootclasspath.add(AndroidSdkProvider.fromRuleContext(ruleContext).getAndroidJar());
+
ImmutableList.Builder<String> javacopts = ImmutableList.builder();
javacopts.addAll(androidSemantics.getCompatibleJavacOptions(ruleContext));
@@ -481,7 +489,7 @@
JavaTargetAttributes.Builder attributesBuilder =
javaCommon
.initCommon(idlHelper.getIdlGeneratedJavaSources(), javacopts.build())
- .setBootClassPath(BootClassPathInfo.create(bootclasspath.build()));
+ .setBootClassPath(bootClassPathInfo);
resourceApk
.asDataBindingContext()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBase.java
index 87e7d03..b471f8f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBase.java
@@ -95,7 +95,8 @@
apkBuilder,
apkSigner,
proguard,
- zipalign))
+ zipalign,
+ /* system= */ null))
.addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
.setFilesToBuild(NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER))
.build();
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 7718367..b1d53b7 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
@@ -24,6 +24,7 @@
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.rules.java.BootClassPathInfo;
import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSdkProviderApi;
import com.google.devtools.build.lib.syntax.EvalException;
import javax.annotation.Nullable;
@@ -52,6 +53,7 @@
private final FilesToRunProvider apkSigner;
private final FilesToRunProvider proguard;
private final FilesToRunProvider zipalign;
+ @Nullable private final BootClassPathInfo system;
public AndroidSdkProvider(
String buildToolsVersion,
@@ -70,7 +72,8 @@
@Nullable FilesToRunProvider apkBuilder,
FilesToRunProvider apkSigner,
FilesToRunProvider proguard,
- FilesToRunProvider zipalign) {
+ FilesToRunProvider zipalign,
+ @Nullable BootClassPathInfo system) {
super(PROVIDER);
this.buildToolsVersion = buildToolsVersion;
this.frameworkAidl = frameworkAidl;
@@ -89,6 +92,7 @@
this.apkSigner = apkSigner;
this.proguard = proguard;
this.zipalign = zipalign;
+ this.system = system;
}
/**
@@ -195,6 +199,10 @@
return zipalign;
}
+ public BootClassPathInfo getSystem() {
+ return system;
+ }
+
/** The provider can construct the Android SDK provider. */
public static class Provider extends BuiltinProvider<AndroidSdkProvider>
implements AndroidSdkProviderApi.Provider<
@@ -222,7 +230,8 @@
Object apkBuilder,
FilesToRunProvider apkSigner,
FilesToRunProvider proguard,
- FilesToRunProvider zipalign)
+ FilesToRunProvider zipalign,
+ Object system)
throws EvalException {
return new AndroidSdkProvider(
buildToolsVersion,
@@ -241,7 +250,8 @@
fromNoneable(apkBuilder, FilesToRunProvider.class),
apkSigner,
proguard,
- zipalign);
+ zipalign,
+ fromNoneable(system, BootClassPathInfo.class));
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSdkProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSdkProviderApi.java
index a572724..3e0e821 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSdkProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSdkProviderApi.java
@@ -23,6 +23,7 @@
import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.StarlarkValue;
import javax.annotation.Nullable;
/**
@@ -242,6 +243,14 @@
positional = true,
named = false,
type = FilesToRunProviderApi.class),
+ @Param(
+ name = "system",
+ doc = "",
+ noneable = true,
+ defaultValue = "None",
+ positional = true,
+ named = false,
+ type = StarlarkValue.class),
},
selfCall = true)
@SkylarkConstructor(objectType = AndroidSdkProviderApi.class)
@@ -262,7 +271,8 @@
/*noneable*/ Object apkBuilder,
FilesToRunProviderT apkSigner,
FilesToRunProviderT proguard,
- FilesToRunProviderT zipalign)
+ FilesToRunProviderT zipalign,
+ /*noneable*/ Object system)
throws EvalException;
}
}