Expose `compilation_info.javac_options_list` for migration Once usages are migrated, `compilation_info.javac_options` can be changed to a `Depset`. PiperOrigin-RevId: 560953670 Change-Id: I92c7a872358845d16a15ceeeb17bc7911edede54
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java index e832d2f..3147b5b 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/java/JavaCompilationInfoProviderApi.java
@@ -33,6 +33,17 @@ ImmutableList<String> getJavacOpts(); @StarlarkMethod( + name = "javac_options_list", + structField = true, + doc = + "A list of options to java compiler. This exists temporarily for migration purposes. " + + "javac_options will return a depset in the future, and this method will be dropped " + + "once all usages have been updated to handle depsets.") + default ImmutableList<String> getJavacOptsList() { + return getJavacOpts(); + } + + @StarlarkMethod( name = "runtime_classpath", structField = true, doc = "Run-time classpath for this Java target.")
diff --git a/src/main/starlark/builtins_bzl/common/java/compile_action.bzl b/src/main/starlark/builtins_bzl/common/java/compile_action.bzl index fdc29b5..1e26d64 100644 --- a/src/main/starlark/builtins_bzl/common/java/compile_action.bzl +++ b/src/main/starlark/builtins_bzl/common/java/compile_action.bzl
@@ -159,7 +159,7 @@ runfiles = [output_class_jar] if source_files or source_jars or resources else [], # TODO(ilist): collect compile_jars from JavaInfo in deps & exports compilation_classpath = java_info.compilation_info.compilation_classpath, - javac_options = java_info.compilation_info.javac_options, + javac_options = java_info.compilation_info.javac_options_list, plugins = _collect_plugins(deps, plugins), )
diff --git a/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl b/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl index 5ad6ab1..1589264 100644 --- a/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl +++ b/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl
@@ -314,6 +314,7 @@ compilation_info = struct( javac_options = all_javac_opts_list, + javac_options_list = all_javac_opts_list, # needs to be flattened because the public API is a list boot_classpath = (bootclasspath.bootclasspath if bootclasspath else java_toolchain.bootclasspath).to_list(), # we only add compile time jars from deps, and not exports
diff --git a/src/main/starlark/builtins_bzl/common/java/java_info.bzl b/src/main/starlark/builtins_bzl/common/java/java_info.bzl index d17736d..aef76c5 100644 --- a/src/main/starlark/builtins_bzl/common/java/java_info.bzl +++ b/src/main/starlark/builtins_bzl/common/java/java_info.bzl
@@ -82,6 +82,10 @@ fields = { "boot_classpath": "Boot classpath for this Java target.", "javac_options": "Options to the java compiler.", + "javac_options_list": """A list of options to java compiler. This exists + temporarily for migration purposes. javac_options will return a depset + in the future, and this method will be dropped once all usages have + been updated to handle depsets.""", "compilation_classpath": "Compilation classpath for this Java target.", "runtime_classpath": "Run-time classpath for this Java target.", }, @@ -92,6 +96,7 @@ runtime_classpath = depset(), boot_classpath = None, javac_options = [], + javac_options_list = [], ) def merge( @@ -228,6 +233,7 @@ compilation_info = _JavaCompilationInfo( boot_classpath = None, javac_options = [], + javac_options_list = [], compilation_classpath = java_info.transitive_compile_time_jars, runtime_classpath = java_info.transitive_runtime_jars, ) @@ -467,6 +473,7 @@ result.update( compilation_info = _JavaCompilationInfo( javac_options = _java_common_internal.intern_javac_opts(compilation_info.javac_options), + javac_options_list = _java_common_internal.intern_javac_opts(compilation_info.javac_options_list), boot_classpath = compilation_info.boot_classpath, compilation_classpath = compilation_info.compilation_classpath, runtime_classpath = compilation_info.runtime_classpath,
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 2cf1014..e16cbca 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
@@ -2166,7 +2166,7 @@ scratch.file( "foo/BUILD", "load(':extension.bzl', 'my_rule')", - "java_library(name = 'my_java_lib_a', srcs = ['java/A.java'])", + "java_library(name = 'my_java_lib_a', srcs = ['java/A.java'], javacopts = ['opt1'])", "my_rule(name = 'my_starlark_rule', dep = ':my_java_lib_a')"); assertNoEvents(); ConfiguredTarget myRuleTarget = getConfiguredTarget("//foo:my_starlark_rule"); @@ -2182,6 +2182,35 @@ prettyArtifactNames( javaCompilationInfoProvider.getRuntimeClasspath().getSet(Artifact.class))) .containsExactly("foo/libmy_java_lib_a.jar"); + assertThat(javaCompilationInfoProvider.getJavacOpts()).contains("opt1"); + assertThat(javaCompilationInfoProvider.getJavacOptsList()).contains("opt1"); + } + + @Test + public void javaInfoStarlarkCompilationInfoJavacOpts() throws Exception { + scratch.file( + "foo/extension.bzl", + "result = provider()", + "def _impl(ctx):", + " return [result(property = ctx.attr.dep[JavaInfo].compilation_info.javac_options_list)]", + "my_rule = rule(_impl, attrs = { 'dep' : attr.label() })"); + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "java_library(name = 'my_java_lib_a', srcs = ['java/A.java'], javacopts = ['opt1'," + + " 'opt2'])", + "my_rule(name = 'my_starlark_rule', dep = ':my_java_lib_a')"); + assertNoEvents(); + ConfiguredTarget myRuleTarget = getConfiguredTarget("//foo:my_starlark_rule"); + + StructImpl info = + (StructImpl) + myRuleTarget.get( + new StarlarkProvider.Key(Label.parseCanonical("//foo:extension.bzl"), "result")); + Sequence<String> javacOptionsList = + Sequence.cast(info.getValue("property"), String.class, "javac_options_list"); + + assertThat(javacOptionsList).containsAtLeast("opt1", "opt2").inOrder(); } /* Test inspired by {@link AbstractJavaLibraryConfiguredTargetTest#testNeverlink}.*/