Remove option to pass TransitiveApi to java_common.compile exports attribute.
PiperOrigin-RevId: 373105495
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
index ca9eedd..a4dd0f5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java
@@ -123,9 +123,7 @@
JavaCompilationArgsProvider.class, javaCompilationArgsBuilder.build());
if (withExportsProvider) {
- javaInfoBuilder.addProvider(
- JavaExportsProvider.class,
- createJavaExportsProvider(exports, /* labels = */ ImmutableList.of()));
+ javaInfoBuilder.addProvider(JavaExportsProvider.class, createJavaExportsProvider(exports));
}
javaInfoBuilder.javaPluginInfo(mergeExportedJavaPluginInfo(exports));
@@ -227,12 +225,9 @@
return concat(transitiveSourceJars, sourceJars);
}
- private JavaExportsProvider createJavaExportsProvider(
- Iterable<JavaInfo> exports, Iterable<Label> labels) {
- ImmutableList.Builder<JavaExportsProvider> builder = new ImmutableList.Builder<>();
- builder.addAll(JavaInfo.fetchProvidersFromList(exports, JavaExportsProvider.class));
- builder.add(new JavaExportsProvider(NestedSetBuilder.wrap(Order.STABLE_ORDER, labels)));
- return JavaExportsProvider.merge(builder.build());
+ private JavaExportsProvider createJavaExportsProvider(Iterable<JavaInfo> exports) {
+ return JavaExportsProvider.merge(
+ JavaInfo.fetchProvidersFromList(exports, JavaExportsProvider.class));
}
private JavaPluginInfo mergeExportedJavaPluginInfo(Iterable<JavaInfo> javaInfos) {
@@ -254,7 +249,6 @@
List<JavaInfo> runtimeDeps,
List<JavaInfo> experimentalLocalCompileTimeDeps,
List<JavaInfo> exports,
- List<Label> exportLabels,
List<JavaInfo> plugins,
List<JavaInfo> exportedPlugins,
List<CcInfo> nativeLibraries,
@@ -351,7 +345,7 @@
createJavaSourceJarsProvider(outputSourceJars, concat(runtimeDeps, exports, deps)))
.addProvider(JavaRuleOutputJarsProvider.class, outputJarsBuilder.build())
.javaPluginInfo(mergeExportedJavaPluginInfo(concat(exportedPlugins, exports)))
- .addProvider(JavaExportsProvider.class, createJavaExportsProvider(exports, exportLabels))
+ .addProvider(JavaExportsProvider.class, createJavaExportsProvider(exports))
.addProvider(JavaCcInfoProvider.class, JavaCcInfoProvider.merge(transitiveNativeLibraries))
.addTransitiveOnlyRuntimeJarsToJavaInfo(deps)
.addTransitiveOnlyRuntimeJarsToJavaInfo(exports)
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 05335fd..2dcf4ca 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
@@ -13,26 +13,21 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.java;
-import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions.INCOMPATIBLE_ENABLE_EXPORTS_PROVIDER;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.PlatformOptions;
-import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
import com.google.devtools.build.lib.analysis.starlark.StarlarkActionFactory;
import com.google.devtools.build.lib.analysis.starlark.StarlarkRuleContext;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.BazelModuleContext;
import com.google.devtools.build.lib.packages.Provider;
import com.google.devtools.build.lib.rules.cpp.CcInfo;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaCommonApi;
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaToolchainStarlarkApiProviderApi;
import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.Module;
import net.starlark.java.eval.Sequence;
import net.starlark.java.eval.Starlark;
import net.starlark.java.eval.StarlarkList;
@@ -49,13 +44,6 @@
StarlarkActionFactory> {
private final JavaSemantics javaSemantics;
- private static final ImmutableSet<String> PRIVATE_STARLARKIFICATION_ALLOWLIST =
- ImmutableSet.of(
- "@_builtins//:blaze/java/java_library.bzl",
- "@_builtins//:blaze/java/java_common.bzl",
- "//tools/build_defs/java:java_library.bzl",
- "//tools/build_defs/java:java_common.bzl");
-
public JavaStarlarkCommon(JavaSemantics javaSemantics) {
this.javaSemantics = javaSemantics;
}
@@ -91,28 +79,6 @@
StarlarkThread thread)
throws EvalException, InterruptedException {
- Sequence<JavaInfo> exportsJavaInfo;
- Sequence<Label> exportsLabels;
- if (exports.isEmpty() || exports.get(0) instanceof JavaInfo) {
- exportsLabels = StarlarkList.empty();
- exportsJavaInfo = Sequence.cast(exports, JavaInfo.class, "exports");
- } else {
- Label label =
- ((BazelModuleContext) Module.ofInnermostEnclosingStarlarkFunction(thread).getClientData())
- .label();
- if (!PRIVATE_STARLARKIFICATION_ALLOWLIST.contains(label.toString())) {
- throw Starlark.errorf("Rule in '%s' cannot use private API", label.getPackageName());
- }
- Sequence<TransitiveInfoCollection> e =
- Sequence.cast(exports, TransitiveInfoCollection.class, "exports");
- exportsLabels =
- StarlarkList.immutableCopyOf(
- e.stream().map(TransitiveInfoCollection::getLabel).collect(toImmutableList()));
- exportsJavaInfo =
- StarlarkList.immutableCopyOf(
- e.stream().map(JavaInfo::getJavaInfo).collect(toImmutableList()));
- }
-
return JavaInfoBuildHelper.getInstance()
.createJavaCompileAction(
starlarkRuleContext,
@@ -127,8 +93,7 @@
experimentalLocalCompileTimeDeps,
JavaInfo.class,
"experimental_local_compile_time_deps"),
- exportsJavaInfo,
- exportsLabels,
+ Sequence.cast(exports, JavaInfo.class, "exports"),
Sequence.cast(plugins, JavaInfo.class, "plugins"),
Sequence.cast(exportedPlugins, JavaInfo.class, "exported_plugins"),
Sequence.cast(nativeLibraries, CcInfo.class, "native_libraries"),
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 682829b..3d7f1aa 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
@@ -22,7 +22,6 @@
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkActionFactoryApi;
import com.google.devtools.build.lib.starlarkbuildapi.StarlarkRuleContextApi;
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
-import com.google.devtools.build.lib.starlarkbuildapi.core.TransitiveInfoCollectionApi;
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
import com.google.devtools.build.lib.starlarkbuildapi.platform.ConstraintValueInfoApi;
import javax.annotation.Nullable;
@@ -131,7 +130,6 @@
named = true,
allowedTypes = {
@ParamType(type = Sequence.class, generic1 = JavaInfoApi.class),
- @ParamType(type = Sequence.class, generic1 = TransitiveInfoCollectionApi.class),
},
defaultValue = "[]",
doc = "A list of exports. Optional."),
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
index 7ec31ea..1fd8f22 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
@@ -17,7 +17,6 @@
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 org.junit.Assert.assertThrows;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -2159,95 +2158,6 @@
.inOrder();
}
- private void writeJavaCustomLibraryWithLabels(String path) throws Exception {
- scratch.file(
- path,
- "def _impl(ctx):",
- " output_jar = ctx.actions.declare_file('lib' + ctx.label.name + '.jar')",
- " compilation_provider = java_common.compile(",
- " ctx,",
- " source_files = ctx.files.srcs,",
- " output = output_jar,",
- " exports = ctx.attr.exports,",
- " java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo],",
- " )",
- " return [",
- " DefaultInfo(",
- " files = depset([output_jar]),",
- " ),",
- " compilation_provider",
- " ]",
- "java_custom_library = rule(",
- " implementation = _impl,",
- " outputs = {",
- " 'my_output': 'lib%{name}.jar'",
- " },",
- " attrs = {",
- " 'srcs': attr.label_list(allow_files=['.java']),",
- " 'exports': attr.label_list(),",
- " '_java_toolchain': attr.label(default = Label('//java/com/google/test:toolchain')),",
- " },",
- " fragments = ['java']",
- ")");
- }
-
- @Test
- public void javaCompile_transitiveExportsWithLabels() throws Exception {
- setBuildLanguageOptions("--incompatible_enable_exports_provider");
- JavaToolchainTestUtil.writeBuildFileForJavaToolchain(scratch);
- writeJavaCustomLibraryWithLabels("tools/build_defs/java/java_library.bzl");
- scratch.file(
- "foo/BUILD",
- "load('//tools/build_defs/java:java_library.bzl', 'java_custom_library')",
- "load(':extension.bzl', 'my_rule')",
- "java_custom_library(name = 'lib',",
- " srcs = ['Lib.java'],",
- " exports = [ ':export' ])",
- "java_custom_library(name = 'export',",
- " srcs = ['Export.java'])",
- "my_rule(name = 'my_starlark_rule', dep = ':lib')");
- scratch.file("tools/build_defs/java/BUILD");
- scratch.file(
- "foo/extension.bzl",
- "result = provider()",
- "def _impl(ctx):",
- " return [result(property = ctx.attr.dep[JavaInfo].transitive_exports)]",
- "my_rule = rule(_impl, attrs = { 'dep' : attr.label() })");
-
- assertNoEvents();
- ConfiguredTarget myRuleTarget = getConfiguredTarget("//foo:my_starlark_rule");
- StructImpl info =
- (StructImpl)
- myRuleTarget.get(
- new StarlarkProvider.Key(
- Label.parseAbsolute(
- "//foo:extension.bzl", /* repositoryMapping = */ ImmutableMap.of()),
- "result"));
-
- Depset exports = (Depset) info.getValue("property");
-
- assertThat(exports.getSet(Label.class).toList())
- .containsExactly(Label.parseAbsolute("//foo:export", ImmutableMap.of()));
- }
-
- @Test
- public void javaCompileTransitiveExportsWithLabels_limitedToBuiltins() throws Exception {
- JavaToolchainTestUtil.writeBuildFileForJavaToolchain(scratch);
- writeJavaCustomLibraryWithLabels("foo/java_library.bzl");
- scratch.file(
- "foo/BUILD",
- "load('//foo:java_library.bzl', 'java_custom_library')",
- "java_custom_library(name = 'lib',",
- " srcs = ['Lib.java'],",
- " exports = [ ':export' ])",
- "java_custom_library(name = 'export',",
- " srcs = ['Export.java'])");
-
- AssertionError e = assertThrows(AssertionError.class, () -> getConfiguredTarget("//foo:lib"));
-
- assertThat(e).hasMessageThat().contains("cannot use private API");
- }
-
@Test
public void testJavaInfoGetGenJarsProvider() throws Exception {
scratch.file(