Fix javacopts expansion We need to perform location expansion first, otherwise `$(location ...)` is treated as a make variable. Actually fixes https://github.com/bazelbuild/rules_java/issues/345 PiperOrigin-RevId: 868123902 Change-Id: I74d38c34f55990d4afc76498567a7740f58aa39e
diff --git a/java/common/rules/impl/compile_action.bzl b/java/common/rules/impl/compile_action.bzl index 098c55b..f553a83 100644 --- a/java/common/rules/impl/compile_action.bzl +++ b/java/common/rules/impl/compile_action.bzl
@@ -136,9 +136,9 @@ or resources present, whereas runfiles in this case are empty. """ expanded_javacopts = javacopts + expanded_javacopts = [ctx.expand_location(opt) for opt in expanded_javacopts] if semantics.expand_javacopts_make_variables: expanded_javacopts = [ctx.expand_make_variables("javacopts", opt, {}) for opt in expanded_javacopts] - expanded_javacopts = [ctx.expand_location(opt) for opt in expanded_javacopts] java_info = _compile_private_for_builtins( ctx, output = output_class_jar,
diff --git a/test/java/bazel/rules/java_binary_tests.bzl b/test/java/bazel/rules/java_binary_tests.bzl index 2d015b6..737acea 100644 --- a/test/java/bazel/rules/java_binary_tests.bzl +++ b/test/java/bazel/rules/java_binary_tests.bzl
@@ -77,11 +77,32 @@ assert_java_info.compilation_info().javac_options().not_contains("$(MY_CUSTOM_OPT)") assert_java_info.compilation_info().javac_options().contains("MY_OPT_VALUE") +def _test_java_binary_javacopts_location_expansion(name): + util.helper_target( + java_binary, + name = name + "/bin", + srcs = ["A.java"], + javacopts = ["-XepOpt:foo=$(location :A.java)"], + ) + + analysis_test( + name = name, + impl = _test_java_binary_javacopts_location_expansion_impl, + target = name + "/bin", + ) + +def _test_java_binary_javacopts_location_expansion_impl(env, target): + assert_java_info = java_info_subject.from_target(env, target) + assert_java_info.compilation_info().javac_options().contains( + "-XepOpt:foo={package}/A.java", + ) + def java_binary_tests(name): test_suite( name = name, tests = [ _test_java_binary_cross_compilation_to_unix, _test_java_binary_javacopts_make_variable_expansion, + _test_java_binary_javacopts_location_expansion, ], )
diff --git a/test/java/testutil/java_info_subject.bzl b/test/java/testutil/java_info_subject.bzl index e924243..e0ec805 100644 --- a/test/java/testutil/java_info_subject.bzl +++ b/test/java/testutil/java_info_subject.bzl
@@ -58,7 +58,7 @@ compilation_classpath = lambda: subjects.depset_file(self.actual.compilation_classpath, self.meta.derive("compilation_classpath")), runtime_classpath = lambda: subjects.depset_file(self.actual.runtime_classpath, self.meta.derive("runtime_classpath")), runtime_classpath_list = lambda: subjects.collection(self.actual.runtime_classpath.to_list(), self.meta.derive("runtime_classpath.to_list()"), format = True), - javac_options = lambda: subjects.collection(helper.tokenize_javacopts(opts = self.actual.javac_options), self.meta.derive("javac_options")), + javac_options = lambda: subjects.collection(helper.tokenize_javacopts(opts = self.actual.javac_options), self.meta.derive("javac_options"), format = True), ) return public