Skip to content

Commit 5fa31f2

Browse files
test
1 parent 4bdf33a commit 5fa31f2

File tree

8 files changed

+79
-4
lines changed

8 files changed

+79
-4
lines changed

README.md

+13
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ http_archive(
4747
],
4848
)
4949

50+
http_archive(
51+
name = "bazel_features",
52+
sha256 = "d7787da289a7fb497352211ad200ec9f698822a9e0757a4976fd9f713ff372b3",
53+
strip_prefix = "bazel_features-1.9.1",
54+
url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.9.1/bazel_features-v1.9.1.tar.gz",
55+
)
56+
5057
# See https://github.com/bazelbuild/rules_scala/releases for up to date version information.
5158
http_archive(
5259
name = "io_bazel_rules_scala",
@@ -74,6 +81,9 @@ rules_scala_setup()
7481
# defining a custom deps toolchains to use your project libs instead
7582
rules_scala_toolchain_deps_repositories(fetch_sources = True)
7683

84+
load("@bazel_features//:deps.bzl", "bazel_features_deps")
85+
bazel_features_deps()
86+
7787
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
7888
rules_proto_dependencies()
7989
rules_proto_toolchains()
@@ -151,6 +161,9 @@ dependency providers configured for `2.11.12`, `2.12.18` and `2.13.12` versions.
151161
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
152162
scala_config(scala_version = "2.13.12")
153163

164+
load("@bazel_features//:deps.bzl", "bazel_features_deps")
165+
bazel_features_deps()
166+
154167
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
155168
rules_proto_dependencies()
156169
rules_proto_toolchains()

WORKSPACE

+11
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@ load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
1515

1616
bazel_skylib_workspace()
1717

18+
http_archive(
19+
name = "bazel_features",
20+
sha256 = "d7787da289a7fb497352211ad200ec9f698822a9e0757a4976fd9f713ff372b3",
21+
strip_prefix = "bazel_features-1.9.1",
22+
url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.9.1/bazel_features-v1.9.1.tar.gz",
23+
)
24+
25+
load("@bazel_features//:deps.bzl", "bazel_features_deps")
26+
27+
bazel_features_deps()
28+
1829
_build_tools_release = "5.1.0"
1930

2031
http_archive(

scala/private/common_attributes.bzl

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Shared attributes for rules"""
22

3+
load("@bazel_features//:features.bzl", "bazel_features")
34
load(
45
"@io_bazel_rules_scala//scala/private:coverage_replacements_provider.bzl",
56
_coverage_replacements_provider = "coverage_replacements_provider",
@@ -48,7 +49,10 @@ common_attrs_for_plugin_bootstrapping = {
4849
default = False,
4950
mandatory = False,
5051
),
51-
}
52+
} | ({
53+
"add_exports": attr.string_list(),
54+
"add_opens": attr.string_list(),
55+
} if bazel_features.java.java_info_constructor_module_flags else {})
5256

5357
common_attrs = {}
5458

scala/private/macros/scala_repositories.bzl

+8
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,14 @@ def rules_scala_setup(scala_compiler_srcjar = None):
9292
],
9393
)
9494

95+
if not native.existing_rule("bazel_features"):
96+
http_archive(
97+
name = "bazel_features",
98+
sha256 = "d7787da289a7fb497352211ad200ec9f698822a9e0757a4976fd9f713ff372b3",
99+
strip_prefix = "bazel_features-1.9.1",
100+
url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.9.1/bazel_features-v1.9.1.tar.gz",
101+
)
102+
95103
if not native.existing_rule("rules_cc"):
96104
http_archive(
97105
name = "rules_cc",

scala/private/phases/phase_compile.bzl

+9-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44
# DOCUMENT THIS
55
#
6+
load("@bazel_features//:features.bzl", "bazel_features")
67
load(
78
"@io_bazel_rules_scala//scala/private:paths.bzl",
89
_get_files_with_extension = "get_files_with_extension",
@@ -298,7 +299,7 @@ def _create_scala_compilation_provider(ctx, ijar, source_jar, deps_providers):
298299
runtime_deps = []
299300
if hasattr(ctx.attr, "runtime_deps"):
300301
runtime_deps = [dep[JavaInfo] for dep in ctx.attr.runtime_deps]
301-
return JavaInfo(
302+
kwargs = dict(
302303
output_jar = ctx.outputs.jar,
303304
compile_jar = ijar,
304305
source_jar = source_jar,
@@ -308,6 +309,13 @@ def _create_scala_compilation_provider(ctx, ijar, source_jar, deps_providers):
308309
neverlink = ctx.attr.neverlink,
309310
)
310311

312+
# The JavaInfo constructor's add_exports and add_opens flags were added in Bazel 7:
313+
# https://github.com/bazelbuild/bazel/issues/20033
314+
if bazel_features.java.java_info_constructor_module_flags:
315+
kwargs["add_exports"] = getattr(ctx.attr, "add_exports", [])
316+
kwargs["add_opens"] = getattr(ctx.attr, "add_opens", [])
317+
return JavaInfo(**kwargs)
318+
311319
def _pack_source_jar(ctx, scala_srcs, input_srcjars):
312320
# https://github.com/bazelbuild/bazel/blob/ff6c0333e4f957bb9f7ab5401b01dbf3e9b515b1/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfoBuildHelper.java#L180-L183
313321
# java_common.pack_sources checks for no srcs and only a single input jar

scala/private/phases/phase_write_executable.bzl

+9
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ def _phase_write_executable(
7373
executable = p.declare_executable.executable
7474
wrapper = p.java_wrapper
7575

76+
# Add --add-exports / --add-opens flags
77+
merged_java_info = p.compile.merged_provider
78+
add_exports = merged_java_info.module_flags_info.add_exports
79+
add_opens = merged_java_info.module_flags_info.add_opens
80+
if add_exports or add_opens:
81+
jvm_flags = list(jvm_flags)
82+
jvm_flags += ["--add-exports=%s=ALL-UNNAMED" % x for x in add_exports.to_list()]
83+
jvm_flags += ["--add-opens=%s=ALL-UNNAMED" % x for x in add_opens.to_list()]
84+
7685
if (is_windows(ctx)):
7786
return _write_executable_windows(ctx, executable, rjars, main_class, jvm_flags, wrapper, use_jacoco)
7887
else:

scala/scala_import.bzl

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
load("@bazel_features//:features.bzl", "bazel_features")
12
load("@io_bazel_rules_scala//scala:jars_to_labels.bzl", "JarsToLabelsInfo")
23
load("//scala/settings:stamp_settings.bzl", "StampScalaImport")
34
load(
@@ -68,7 +69,7 @@ def _scala_import_impl(ctx):
6869
]
6970

7071
def _new_java_info(ctx, jar, stamped_jar):
71-
return JavaInfo(
72+
kwargs = dict(
7273
output_jar = jar,
7374
compile_jar = stamped_jar,
7475
exports = [target[JavaInfo] for target in ctx.attr.exports],
@@ -78,6 +79,13 @@ def _new_java_info(ctx, jar, stamped_jar):
7879
neverlink = ctx.attr.neverlink,
7980
)
8081

82+
# The JavaInfo constructor's add_exports and add_opens flags were added in Bazel 7:
83+
# https://github.com/bazelbuild/bazel/issues/20033
84+
if bazel_features.java.java_info_constructor_module_flags:
85+
kwargs["add_exports"] = ctx.attr.add_exports
86+
kwargs["add_opens"] = ctx.attr.add_opens
87+
return JavaInfo(**kwargs)
88+
8189
def _add_labels_of_current_code_jars(code_jars, label, jars2labels):
8290
for jar in code_jars.to_list():
8391
jars2labels[jar.path] = label
@@ -148,6 +156,9 @@ scala_import = rule(
148156
"java_compile_toolchain": attr.label(
149157
default = Label("@bazel_tools//tools/jdk:current_java_toolchain"),
150158
),
151-
},
159+
} | ({
160+
"add_exports": attr.string_list(),
161+
"add_opens": attr.string_list(),
162+
} if bazel_features.java.java_info_constructor_module_flags else {}),
152163
toolchains = ["@bazel_tools//tools/jdk:toolchain_type"],
153164
)

test_version/WORKSPACE.template

+11
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ http_archive(
1111
],
1212
)
1313

14+
http_archive(
15+
name = "bazel_features",
16+
sha256 = "d7787da289a7fb497352211ad200ec9f698822a9e0757a4976fd9f713ff372b3",
17+
strip_prefix = "bazel_features-1.9.1",
18+
url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.9.1/bazel_features-v1.9.1.tar.gz",
19+
)
20+
21+
load("@bazel_features//:deps.bzl", "bazel_features_deps")
22+
23+
bazel_features_deps()
24+
1425
http_archive(
1526
name = "rules_proto",
1627
sha256 = "8e7d59a5b12b233be5652e3d29f42fba01c7cbab09f6b3a8d0a57ed6d1e9a0da",

0 commit comments

Comments
 (0)