Skip to content

Commit 0c0be9b

Browse files
_scalac attributes list
1 parent fdf2929 commit 0c0be9b

File tree

8 files changed

+79
-126
lines changed

8 files changed

+79
-126
lines changed

scala/private/common_attributes.bzl

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ load(
88
"@io_bazel_rules_scala//scala:plusone.bzl",
99
_collect_plus_one_deps_aspect = "collect_plus_one_deps_aspect",
1010
)
11+
load("//scala/versions:versions.bzl", "sanitize_version")
12+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
1113

1214
common_attrs_for_plugin_bootstrapping = {
1315
"srcs": attr.label_list(allow_files = [
@@ -84,35 +86,10 @@ implicit_deps = {
8486
"_java_runtime": attr.label(
8587
default = Label("@bazel_tools//tools/jdk:current_java_runtime"),
8688
),
87-
"_scalac": attr.label(
88-
executable = True,
89-
cfg = "exec",
90-
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac"),
91-
allow_files = True,
92-
),
93-
"_scalac_before_2_12_13": attr.label(
94-
executable = True,
95-
cfg = "exec",
96-
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_before_2_12_13"),
97-
allow_files = True,
98-
),
99-
"_scalac_after_2_12_13_and_before_2_13_12": attr.label(
100-
executable = True,
101-
cfg = "exec",
102-
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_after_2_12_13_and_before_2_13_12"),
103-
allow_files = True,
104-
),
105-
"_scalac_after_2_13_12": attr.label(
106-
executable = True,
107-
cfg = "exec",
108-
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_after_2_13_12"),
109-
allow_files = True,
110-
),
111-
"_scalac_3": attr.label(
112-
executable = True,
113-
cfg = "exec",
114-
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_3"),
115-
allow_files = True,
89+
"_scalac": attr.label_list(
90+
default = [
91+
Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac"),
92+
] + [Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_" + sanitize_version(version)) for version in SCALA_VERSIONS],
11693
),
11794
"_exe": attr.label(
11895
executable = True,

scala/private/macros/setup_scala_toolchain.bzl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ def setup_scala_toolchain(
160160

161161
scala_toolchain(
162162
name = "%s_impl" % name,
163-
scala_version = scala_version,
164163
dep_providers = dep_providers,
165164
enable_semanticdb = enable_semanticdb,
166165
visibility = visibility,

scala/private/phases/phase_compile.bzl

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ load(
1919
load(":resources.bzl", _resource_paths = "paths")
2020
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION")
2121
load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "extract_major_version", "extract_minor_version")
22+
load("//scala/versions:versions.bzl", "sanitize_version")
2223

2324
buildijar_default_value = True if SCALA_VERSION.startswith("2.") else False
2425

@@ -392,16 +393,9 @@ def _interim_java_provider_for_java_compilation(scala_output):
392393
)
393394

394395
def _select_scalac(ctx):
395-
scala_version = ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"].scala_version
396-
if scala_version:
397-
major_version = extract_major_version(scala_version)
398-
minor_version = extract_minor_version(scala_version)
399-
if major_version.startswith("2.11") or (major_version.startswith("2.12") and int(minor_version) < 13):
400-
return ctx.executable._scalac_before_2_12_13
401-
if ((major_version.startswith("2.12") and int(minor_version) >= 13) or (major_version.startswith("2.13") and int(minor_version) < 12)):
402-
return ctx.executable._scalac_after_2_12_13_and_before_2_13_12
403-
if (major_version.startswith("2.13") and int(minor_version) >= 12):
404-
return ctx.executable._scalac_after_2_13_12
405-
if (major_version.startswith("3")):
406-
return ctx.executable._scalac_3
407-
return ctx.executable._scalac
396+
if hasattr(ctx.attr, "scala_version"):
397+
version_suffix = sanitize_version(ctx.attr.scala_version)
398+
for scalac in ctx.attr._scalac:
399+
if scalac.label.name.endswith(version_suffix):
400+
return scalac.files_to_run
401+
return ctx.attr._scalac[0].files_to_run

scala/private/rules/scala_library.bzl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,10 @@ _scala_library_for_plugin_bootstrapping_attrs.update(implicit_deps)
173173
# which does not contain plugin related attributes, and thus avoids the cyclic dependency issue
174174
_scala_library_for_plugin_bootstrapping_attrs.update({
175175
"build_ijar": attr.bool(default = True),
176-
"_scalac": attr.label(
177-
executable = True,
178-
cfg = "exec",
179-
default = Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_bootstrap"),
180-
allow_files = True,
176+
"_scalac": attr.label_list(
177+
default = [
178+
Label("@io_bazel_rules_scala//src/java/io/bazel/rulesscala/scalac:scalac_bootstrap"),
179+
],
181180
),
182181
})
183182

scala/scala_toolchain.bzl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ def _scala_toolchain_impl(ctx):
101101
enable_semanticdb = ctx.attr.enable_semanticdb,
102102
semanticdb_bundle_in_jar = ctx.attr.semanticdb_bundle_in_jar,
103103
use_argument_file_in_runner = ctx.attr.use_argument_file_in_runner,
104-
scala_version = ctx.attr.scala_version,
105104
)
106105
return [toolchain]
107106

@@ -174,7 +173,6 @@ scala_toolchain = rule(
174173
default = False,
175174
doc = "Changes java binaries scripts (including tests) to use argument files and not classpath jars to improve performance, requires java > 8",
176175
),
177-
"scala_version": attr.string(),
178176
},
179177
fragments = ["java"],
180178
)

src/java/io/bazel/rulesscala/scalac/BUILD

Lines changed: 5 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -28,63 +28,7 @@ java_binary(
2828
],
2929
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
3030
visibility = ["//visibility:public"],
31-
deps = DEP_REPORTING_DEPS + SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter:reporter"],
32-
)
33-
34-
java_binary(
35-
name = "scalac_before_2_12_13",
36-
srcs = [
37-
":scalac2_files",
38-
],
39-
javacopts = [
40-
"-source 1.8",
41-
"-target 1.8",
42-
],
43-
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
44-
visibility = ["//visibility:public"],
45-
deps = SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter:reporter_before_2_12_13"],
46-
)
47-
48-
java_binary(
49-
name = "scalac_after_2_12_13_and_before_2_13_12",
50-
srcs = [
51-
":scalac2_files",
52-
],
53-
javacopts = [
54-
"-source 1.8",
55-
"-target 1.8",
56-
],
57-
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
58-
visibility = ["//visibility:public"],
59-
deps = SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter:reporter_after_2_12_13_and_before_2_13_12"],
60-
)
61-
62-
java_binary(
63-
name = "scalac_after_2_13_12",
64-
srcs = [
65-
":scalac2_files",
66-
],
67-
javacopts = [
68-
"-source 1.8",
69-
"-target 1.8",
70-
],
71-
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
72-
visibility = ["//visibility:public"],
73-
deps = SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter:reporter_after_2_13_12"],
74-
)
75-
76-
java_binary(
77-
name = "scalac_3",
78-
srcs = [
79-
":scalac3_files",
80-
],
81-
javacopts = [
82-
"-source 1.8",
83-
"-target 1.8",
84-
],
85-
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
86-
visibility = ["//visibility:public"],
87-
deps = SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter:reporter_3"],
31+
deps = DEP_REPORTING_DEPS + SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter"],
8832
)
8933

9034
java_binary(
@@ -98,14 +42,14 @@ java_binary(
9842
],
9943
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
10044
visibility = ["//visibility:public"],
101-
deps = SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter:reporter"],
45+
deps = SCALAC_DEPS + ["//src/java/io/bazel/rulesscala/scalac/reporter"],
10246
)
10347

10448
filegroup(
10549
name = "scalac_files",
10650
srcs = [
107-
"ScalacWorker.java",
10851
"ScalacInvokerResults.java",
52+
"ScalacWorker.java",
10953
] + (
11054
[
11155
"ScalacInvoker.java",
@@ -115,21 +59,6 @@ filegroup(
11559
visibility = ["//visibility:public"],
11660
)
11761

118-
filegroup(
119-
name = "scalac2_files",
120-
srcs = [
121-
"ReportableMainClass.java",
122-
"ScalacInvoker.java",
123-
"ScalacInvokerResults.java",
124-
"ScalacWorker.java",
125-
],
126-
)
62+
load("//src/java/io/bazel/rulesscala/scalac:scalac.bzl", "setup_scalac")
12763

128-
filegroup(
129-
name = "scalac3_files",
130-
srcs = [
131-
"ScalacInvoker3.java",
132-
"ScalacInvokerResults.java",
133-
"ScalacWorker.java",
134-
],
135-
)
64+
setup_scalac()

src/java/io/bazel/rulesscala/scalac/reporter/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ java_library(
2323
],
2424
)
2525

26+
#TODO prod version will register reporters automatically in a loop (SCALA_VERSIONS)
2627
java_library(
2728
name = "reporter_before_2_12_13",
2829
srcs = [
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
load("@rules_java//java:defs.bzl", "java_binary", "java_library")
2+
load("//scala/versions:versions.bzl", "sanitize_version")
3+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS")
4+
load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "extract_major_version", "extract_minor_version")
5+
6+
def setup_scalac():
7+
for scala_version in SCALA_VERSIONS:
8+
_scalac(scala_version)
9+
10+
def _scalac(scala_version):
11+
scala_major_version = extract_major_version(scala_version)
12+
scala_minor_version = extract_minor_version(scala_version)
13+
version_suffix = "_" + sanitize_version(scala_version)
14+
15+
java_binary(
16+
name = "scalac" + version_suffix,
17+
srcs = _scalac_srcs(scala_version),
18+
main_class = "io.bazel.rulesscala.scalac.ScalacWorker",
19+
visibility = ["//visibility:public"],
20+
javacopts = [
21+
"-source 1.8",
22+
"-target 1.8",
23+
],
24+
deps = [
25+
_reporter(scala_major_version, scala_minor_version),
26+
"//scala/private/toolchain_deps:scala_compile_classpath",
27+
"//src/java/io/bazel/rulesscala/io_utils",
28+
"@bazel_tools//src/main/protobuf:worker_protocol_java_proto",
29+
"@io_bazel_rules_scala//src/java/io/bazel/rulesscala/jar",
30+
"@io_bazel_rules_scala//src/java/io/bazel/rulesscala/worker",
31+
"@io_bazel_rules_scala//src/protobuf/io/bazel/rules_scala:diagnostics_java_proto",
32+
"//src/java/io/bazel/rulesscala/scalac/compileoptions",
33+
],
34+
)
35+
36+
def _reporter(scala_major_version, scala_minor_version):
37+
if (scala_major_version == "2.11") or (scala_major_version == "2.12" and int(scala_minor_version) < 13):
38+
return "//src/java/io/bazel/rulesscala/scalac/reporter:reporter_before_2_12_13"
39+
elif (scala_major_version == "2.12" and int(scala_minor_version) >= 13) or (scala_major_version == "2.13" and int(scala_minor_version) < 12):
40+
return "//src/java/io/bazel/rulesscala/scalac/reporter:reporter_after_2_12_13_and_before_2_13_12"
41+
elif (scala_major_version == "2.13" and int(scala_minor_version) >= 12):
42+
return "//src/java/io/bazel/rulesscala/scalac/reporter:reporter_after_2_13_12"
43+
else:
44+
return "//src/java/io/bazel/rulesscala/scalac/reporter:reporter_3"
45+
46+
def _scalac_srcs(scala_version):
47+
return [
48+
"ReportableMainClass.java",
49+
"ScalacInvoker.java",
50+
"ScalacInvokerResults.java",
51+
"ScalacWorker.java",
52+
] if scala_version.startswith("2") else [
53+
"ScalacInvoker3.java",
54+
"ScalacInvokerResults.java",
55+
"ScalacWorker.java",
56+
]

0 commit comments

Comments
 (0)