Skip to content

Commit 6c9bc77

Browse files
hvadehrarules_java Copybara
authored andcommitted
Fix javacopts expansion
We need to perform location expansion first, otherwise `$(location ...)` is treated as a make variable. Actually fixes #345 PiperOrigin-RevId: 868123902 Change-Id: I74d38c34f55990d4afc76498567a7740f58aa39e
1 parent aa4075b commit 6c9bc77

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

java/common/rules/impl/compile_action.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ def compile_action(
136136
or resources present, whereas runfiles in this case are empty.
137137
"""
138138
expanded_javacopts = javacopts
139+
expanded_javacopts = [ctx.expand_location(opt) for opt in expanded_javacopts]
139140
if semantics.expand_javacopts_make_variables:
140141
expanded_javacopts = [ctx.expand_make_variables("javacopts", opt, {}) for opt in expanded_javacopts]
141-
expanded_javacopts = [ctx.expand_location(opt) for opt in expanded_javacopts]
142142
java_info = _compile_private_for_builtins(
143143
ctx,
144144
output = output_class_jar,

test/java/bazel/rules/java_binary_tests.bzl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,32 @@ def _test_java_binary_javacopts_make_variable_expansion_impl(env, target):
7777
assert_java_info.compilation_info().javac_options().not_contains("$(MY_CUSTOM_OPT)")
7878
assert_java_info.compilation_info().javac_options().contains("MY_OPT_VALUE")
7979

80+
def _test_java_binary_javacopts_location_expansion(name):
81+
util.helper_target(
82+
java_binary,
83+
name = name + "/bin",
84+
srcs = ["A.java"],
85+
javacopts = ["-XepOpt:foo=$(location :A.java)"],
86+
)
87+
88+
analysis_test(
89+
name = name,
90+
impl = _test_java_binary_javacopts_location_expansion_impl,
91+
target = name + "/bin",
92+
)
93+
94+
def _test_java_binary_javacopts_location_expansion_impl(env, target):
95+
assert_java_info = java_info_subject.from_target(env, target)
96+
assert_java_info.compilation_info().javac_options().contains(
97+
"-XepOpt:foo={package}/A.java",
98+
)
99+
80100
def java_binary_tests(name):
81101
test_suite(
82102
name = name,
83103
tests = [
84104
_test_java_binary_cross_compilation_to_unix,
85105
_test_java_binary_javacopts_make_variable_expansion,
106+
_test_java_binary_javacopts_location_expansion,
86107
],
87108
)

test/java/testutil/java_info_subject.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def _new_java_compilation_info_subject(java_info, meta):
5858
compilation_classpath = lambda: subjects.depset_file(self.actual.compilation_classpath, self.meta.derive("compilation_classpath")),
5959
runtime_classpath = lambda: subjects.depset_file(self.actual.runtime_classpath, self.meta.derive("runtime_classpath")),
6060
runtime_classpath_list = lambda: subjects.collection(self.actual.runtime_classpath.to_list(), self.meta.derive("runtime_classpath.to_list()"), format = True),
61-
javac_options = lambda: subjects.collection(helper.tokenize_javacopts(opts = self.actual.javac_options), self.meta.derive("javac_options")),
61+
javac_options = lambda: subjects.collection(helper.tokenize_javacopts(opts = self.actual.javac_options), self.meta.derive("javac_options"), format = True),
6262
)
6363
return public
6464

0 commit comments

Comments
 (0)