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 911e44029768eb..5b7eb6226048fb 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 @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.packages.AggregatingAttributeMapper; import com.google.devtools.build.lib.packages.Type; +import com.google.devtools.build.lib.rules.java.BootClassPathInfo; import com.google.devtools.build.lib.rules.java.JavaConfiguration; /** Implementation of the {@code android_sdk} rule. */ @@ -71,6 +72,7 @@ public ConfiguredTarget create(RuleContext ruleContext) Artifact sourceProperties = ruleContext.getHostPrerequisiteArtifact("source_properties"); Artifact shrinkedAndroidJar = ruleContext.getPrerequisiteArtifact("shrinked_android_jar"); Artifact mainDexClasses = ruleContext.getPrerequisiteArtifact("main_dex_classes"); + BootClassPathInfo system = ruleContext.getPrerequisite("system", BootClassPathInfo.PROVIDER); if (ruleContext.hasErrors()) { return null; @@ -95,7 +97,7 @@ public ConfiguredTarget create(RuleContext ruleContext) apkSigner, proguard, zipalign, - /* system= */ null); + system); return new RuleConfiguredTargetBuilder(ruleContext) .addNativeDeclaredProvider(sdk) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBaseRule.java index d5b5d33823e8cd..378f96f2b174d2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBaseRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkBaseRule.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; import com.google.devtools.build.lib.packages.StarlarkProviderIdentifier; +import com.google.devtools.build.lib.rules.java.BootClassPathInfo; import com.google.devtools.build.lib.rules.java.JavaConfiguration; import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaToolchainBaseRule; import com.google.devtools.build.lib.rules.java.JavaSemantics; @@ -133,6 +134,10 @@ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment envi .cfg(ExecutionTransitionFactory.create()) .allowedFileTypes(ANY_FILE) .exec()) + .add( + attr("system", LABEL) + .allowedFileTypes() + .mandatoryProviders(BootClassPathInfo.PROVIDER.id())) .advertiseStarlarkProvider( StarlarkProviderIdentifier.forKey(AndroidSdkProvider.PROVIDER.getKey())) .build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java index 95c997c82db57d..e4251e3bd19b7c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java @@ -265,8 +265,6 @@ public Label getJavaToolchainLabel(JavaToolchainStarlarkApiProviderApi toolchain @Override public ProviderApi getBootClassPathInfo() { - // No implementation in Bazel. This method not callable in Starlark except through - // (discouraged) use of --experimental_google_legacy_api. - return null; + return BootClassPathInfo.PROVIDER; } } diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java index 1410247015a2b4..36dafdf7cddbe7 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCommonApi.java @@ -602,7 +602,6 @@ JavaInfoT addCompileTimeJavaDependencyArtifacts( @StarlarkMethod( name = "BootClassPathInfo", doc = "The provider used to supply bootclasspath information", - structField = true, - enableOnlyWithFlag = BuildLanguageOptions.EXPERIMENTAL_GOOGLE_LEGACY_API) + structField = true) ProviderApi getBootClassPathInfo(); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java index b1cc56c915f7af..62dd15742807ce 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java @@ -16,6 +16,7 @@ import static com.google.common.base.Verify.verifyNotNull; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static com.google.common.truth.Truth8.assertThat; import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.prettyArtifactNames; import static com.google.devtools.build.lib.rules.java.JavaCompileActionTestHelper.getClasspath; import static com.google.devtools.build.lib.rules.java.JavaCompileActionTestHelper.getCompileTimeDependencyArtifacts; @@ -628,7 +629,9 @@ public void testExportsWithStrictJavaDepsFlag() throws Exception { JavaCompileAction javacAction = (JavaCompileAction) getGeneratingActionForLabel("//java/exports:libc.jar"); - assertThat(prettyArtifactNames(getInputs(javacAction, getDirectJars(javacAction)))) + assertThat( + prettyArtifactNames(getInputs(javacAction, getDirectJars(javacAction))).stream() + .filter(a -> !a.equals("tools/android/bootclasspath_android_only_auxiliary.jar"))) .containsExactly("java/exports/libb-hjar.jar", "java/exports/liba-hjar.jar"); assertNoEvents(); } @@ -1850,7 +1853,9 @@ public void testSrcjarStrictDeps() throws Exception { JavaCompileAction javacAction = (JavaCompileAction) getGeneratingActionForLabel("//java/strict:liba.jar"); - assertThat(prettyArtifactNames(getInputs(javacAction, getDirectJars(javacAction)))) + assertThat( + prettyArtifactNames(getInputs(javacAction, getDirectJars(javacAction))).stream() + .filter(a -> !a.equals("tools/android/bootclasspath_android_only_auxiliary.jar"))) .containsExactly("java/strict/libb-hjar.jar"); } @@ -2535,12 +2540,16 @@ public void testLocalResourcesFirstInJavaCompilationClasspath() throws Exception (JavaCompileAction) getGeneratingAction(getFileConfiguredTarget("//java/foo:liblib.jar").getArtifact()); - assertThat(prettyArtifactNames(getInputs(javacAction, getDirectJars(javacAction)))) + assertThat( + prettyArtifactNames(getInputs(javacAction, getDirectJars(javacAction))).stream() + .filter(a -> !a.equals("tools/android/bootclasspath_android_only_auxiliary.jar"))) .containsExactly( "java/foo/lib_resources.jar", "java/foo/dep_resources.jar", "java/foo/libdep-hjar.jar") .inOrder(); - assertThat(prettyArtifactNames(getInputs(javacAction, getClasspath(javacAction)))) + assertThat( + prettyArtifactNames(getInputs(javacAction, getClasspath(javacAction))).stream() + .filter(a -> !a.equals("tools/android/bootclasspath_android_only_auxiliary.jar"))) .containsExactly( "java/foo/lib_resources.jar", "java/foo/dep_resources.jar", "java/foo/libdep-hjar.jar") .inOrder();