From e9dddea1cd7bdeb6e4ece564984337a076691e84 Mon Sep 17 00:00:00 2001 From: mkuta Date: Wed, 6 Mar 2024 11:33:26 +0100 Subject: [PATCH] dependency analyzer plugin --- scala/private/rule_impls.bzl | 10 +++- test/plugins/BUILD | 2 +- test/shell/test_scala_config.sh | 4 +- .../dependency_analyzer/src/main/analyzer.bzl | 40 ++++++++----- .../dependency_analyzer/src/test/BUILD | 4 +- .../src/test/analyzer_test.bzl | 10 ++-- .../src/test/analyzer_test_scala_2.bzl | 56 +++++++++---------- .../src/test/analyzer_test_scala_3.bzl | 16 +++--- third_party/utils/src/test/BUILD | 34 ++++++----- 9 files changed, 101 insertions(+), 75 deletions(-) diff --git a/scala/private/rule_impls.bzl b/scala/private/rule_impls.bzl index 1268b6109..0212f9597 100644 --- a/scala/private/rule_impls.bzl +++ b/scala/private/rule_impls.bzl @@ -17,6 +17,7 @@ load("@bazel_skylib//lib:paths.bzl", "paths") load("@bazel_tools//tools/jdk:toolchain_utils.bzl", "find_java_toolchain") load(":common.bzl", "rlocationpath_from_rootpath", _collect_plugin_paths = "collect_plugin_paths") load(":resources.bzl", _resource_paths = "paths") +load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix") def expand_location(ctx, flags): if hasattr(ctx.attr, "data"): @@ -62,7 +63,7 @@ def compile_scala( input_plugins = plugins plugins = _collect_plugin_paths(plugins) if dependency_info.use_analyzer: - plugins = depset(transitive = [plugins, ctx.attr._dependency_analyzer_plugin.files]) + plugins = depset(transitive = [plugins, _dependency_analyzer_plugin(ctx).files]) toolchain = ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"] compiler_classpath_jars = cjars if dependency_info.dependency_mode == "direct" else transitive_compile_jars @@ -144,6 +145,13 @@ def compile_scala( ] + [args], ) +def _dependency_analyzer_plugin(ctx): + suffix = version_suffix(ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"].scala_version) + for plugin in ctx.attr._dependency_analyzer_plugin: + if plugin.label.name.endswith(suffix): + return plugin + return ctx.attr._dependency_analyzer_plugin[0] + def compile_java(ctx, source_jars, source_files, output, extra_javac_opts, providers_of_dependencies): java_toolchain = specified_java_compile_toolchain(ctx) diff --git a/test/plugins/BUILD b/test/plugins/BUILD index 1a5cf607e..0288ec06f 100644 --- a/test/plugins/BUILD +++ b/test/plugins/BUILD @@ -21,7 +21,7 @@ scala_library( ":gen-scalac-plugin.xml", ], deps = [ - "@io_bazel_rules_scala_scala_compiler", + "//scala/private/toolchain_deps:scala_compile_classpath", ], ) diff --git a/test/shell/test_scala_config.sh b/test/shell/test_scala_config.sh index 88870f8ea..7d3c5533f 100755 --- a/test/shell/test_scala_config.sh +++ b/test/shell/test_scala_config.sh @@ -5,13 +5,13 @@ dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) runner=$(get_test_runner "${1:-local}") test_classpath_contains_2_12() { - bazel aquery 'mnemonic("Javac", //src/java/io/bazel/rulesscala/scalac:scalac)' \ + bazel aquery 'mnemonic("Javac", //src/java/io/bazel/rulesscala/scalac:scalac_2_12_18)' \ --repo_env=SCALA_VERSION=2.12.18 \ | grep scala-library-2.12 } test_classpath_contains_2_13() { - bazel aquery 'mnemonic("Javac", //src/java/io/bazel/rulesscala/scalac:scalac)' \ + bazel aquery 'mnemonic("Javac", //src/java/io/bazel/rulesscala/scalac:scalac_2_13_12)' \ --repo_env=SCALA_VERSION=2.13.12 \ | grep scala-library-2.13 } diff --git a/third_party/dependency_analyzer/src/main/analyzer.bzl b/third_party/dependency_analyzer/src/main/analyzer.bzl index 65b2c5e5f..a555d7224 100644 --- a/third_party/dependency_analyzer/src/main/analyzer.bzl +++ b/third_party/dependency_analyzer/src/main/analyzer.bzl @@ -1,15 +1,24 @@ load("//scala:scala.bzl", "scala_library_for_plugin_bootstrapping") -load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION", "SCALA_VERSION") +load( + "//scala:scala_cross_version.bzl", + "extract_major_version", + "version_suffix", +) +load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS") def analyzer(): - if SCALA_MAJOR_VERSION.startswith("2"): - _analyzer_scala_2() + for scala_version in SCALA_VERSIONS: + _analyzer(scala_version) + +def _analyzer(scala_version): + if scala_version.startswith("2"): + _analyzer_scala_2(scala_version) else: - _analyzer_scala_3() + _analyzer_scala_3(scala_version) -def _analyzer_scala_3(): +def _analyzer_scala_3(scala_version): scala_library_for_plugin_bootstrapping( - name = "dependency_analyzer", + name = "dependency_analyzer" + version_suffix(scala_version), srcs = [ "io/bazel/rulesscala/dependencyanalyzer3/DependencyAnalyzer.scala", ], @@ -20,9 +29,9 @@ def _analyzer_scala_3(): ], ) -def _analyzer_scala_2(): +def _analyzer_scala_2(scala_version): scala_library_for_plugin_bootstrapping( - name = "scala_version", + name = "scala_version" + version_suffix(scala_version), srcs = [ "io/bazel/rulesscala/dependencyanalyzer/ScalaVersion.scala", ], @@ -35,17 +44,18 @@ def _analyzer_scala_2(): ], ) - SCALA_MINOR_VERSION = int(SCALA_VERSION.replace( - "%s." % SCALA_MAJOR_VERSION, + scala_major_version = extract_major_version(scala_version) + scala_minor_version = int(scala_version.replace( + "%s." % scala_major_version, "", )) - REPORTER_COMPATIBILITY_FOR_212 = SCALA_MAJOR_VERSION == "2.12" and SCALA_MINOR_VERSION >= 13 + REPORTER_COMPATIBILITY_FOR_212 = scala_major_version == "2.12" and scala_minor_version >= 13 - REPORTER_COMPATIBILITY = "213" if (SCALA_MAJOR_VERSION == "2.13" or REPORTER_COMPATIBILITY_FOR_212) else "" + REPORTER_COMPATIBILITY = "213" if (scala_major_version == "2.13" or REPORTER_COMPATIBILITY_FOR_212) else "" scala_library_for_plugin_bootstrapping( - name = "dependency_analyzer", + name = "dependency_analyzer" + version_suffix(scala_version), srcs = [ "io/bazel/rulesscala/dependencyanalyzer/AstUsedJarFinder.scala", "io/bazel/rulesscala/dependencyanalyzer/DependencyAnalyzer.scala", @@ -57,8 +67,8 @@ def _analyzer_scala_2(): resources = ["resources/scalac-plugin.xml"], visibility = ["//visibility:public"], deps = [ - ":scala_version", + ":scala_version" + version_suffix(scala_version), "//scala/private/toolchain_deps:scala_compile_classpath", - "//src/java/io/bazel/rulesscala/scalac/reporter", + "//src/java/io/bazel/rulesscala/scalac:scalac_reporter" + version_suffix(scala_version), ], ) diff --git a/third_party/dependency_analyzer/src/test/BUILD b/third_party/dependency_analyzer/src/test/BUILD index 810de981a..e4cbb445c 100644 --- a/third_party/dependency_analyzer/src/test/BUILD +++ b/third_party/dependency_analyzer/src/test/BUILD @@ -1,10 +1,12 @@ load(":analyzer_test.bzl", "tests") load("//scala:scala.bzl", "scala_test") +load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION") +load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix") tests() scala_test( name = "test_optionsparser", srcs = ["test_optionsparser.scala"], - deps = ["//third_party/dependency_analyzer/src/main:dependency_analyzer"], + deps = ["//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix(SCALA_VERSION)], ) diff --git a/third_party/dependency_analyzer/src/test/analyzer_test.bzl b/third_party/dependency_analyzer/src/test/analyzer_test.bzl index 2676ea7c5..d7b6ff181 100644 --- a/third_party/dependency_analyzer/src/test/analyzer_test.bzl +++ b/third_party/dependency_analyzer/src/test/analyzer_test.bzl @@ -1,9 +1,11 @@ load(":analyzer_test_scala_2.bzl", "analyzer_tests_scala_2") load(":analyzer_test_scala_3.bzl", "analyzer_tests_scala_3") -load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION") +load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSION") +load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix") def tests(): - if SCALA_MAJOR_VERSION.startswith("2"): - analyzer_tests_scala_2() + suffix = version_suffix(SCALA_VERSION) + if SCALA_VERSION.startswith("2"): + analyzer_tests_scala_2(suffix) else: - analyzer_tests_scala_3() + analyzer_tests_scala_3(suffix) diff --git a/third_party/dependency_analyzer/src/test/analyzer_test_scala_2.bzl b/third_party/dependency_analyzer/src/test/analyzer_test_scala_2.bzl index d599b0119..87b92395a 100644 --- a/third_party/dependency_analyzer/src/test/analyzer_test_scala_2.bzl +++ b/third_party/dependency_analyzer/src/test/analyzer_test_scala_2.bzl @@ -1,10 +1,10 @@ load("//scala:scala.bzl", "scala_test") -def analyzer_tests_scala_2(): +def analyzer_tests_scala_2(version_suffix): common_jvm_flags = [ - "-Dplugin.jar.location=$(execpath //third_party/dependency_analyzer/src/main:dependency_analyzer)", - "-Dscala.library.location=$(rootpath @io_bazel_rules_scala_scala_library)", - "-Dscala.reflect.location=$(rootpath @io_bazel_rules_scala_scala_reflect)", + "-Dplugin.jar.location=$(execpath //third_party/dependency_analyzer/src/main:dependency_analyzer%s)" % version_suffix, + "-Dscala.library.location=$(rootpath @io_bazel_rules_scala_scala_library%s)" % version_suffix, + "-Dscala.reflect.location=$(rootpath @io_bazel_rules_scala_scala_reflect%s)" % version_suffix, ] scala_test( @@ -16,12 +16,12 @@ def analyzer_tests_scala_2(): jvm_flags = common_jvm_flags, deps = [ "//src/java/io/bazel/rulesscala/io_utils", - "//third_party/dependency_analyzer/src/main:dependency_analyzer", - "//third_party/dependency_analyzer/src/main:scala_version", - "//third_party/utils/src/test:test_util", - "@io_bazel_rules_scala_scala_compiler", - "@io_bazel_rules_scala_scala_library", - "@io_bazel_rules_scala_scala_reflect", + "//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix, + "//third_party/dependency_analyzer/src/main:scala_version" + version_suffix, + "//third_party/utils/src/test:test_util" + version_suffix, + "@io_bazel_rules_scala_scala_compiler" + version_suffix, + "@io_bazel_rules_scala_scala_library" + version_suffix, + "@io_bazel_rules_scala_scala_reflect" + version_suffix, ], ) @@ -32,9 +32,9 @@ def analyzer_tests_scala_2(): "io/bazel/rulesscala/dependencyanalyzer/ScalaVersionTest.scala", ], deps = [ - "//third_party/dependency_analyzer/src/main:scala_version", - "@io_bazel_rules_scala_scala_library", - "@io_bazel_rules_scala_scala_reflect", + "//third_party/dependency_analyzer/src/main:scala_version" + version_suffix, + "@io_bazel_rules_scala_scala_library" + version_suffix, + "@io_bazel_rules_scala_scala_reflect" + version_suffix, ], ) @@ -48,11 +48,11 @@ def analyzer_tests_scala_2(): unused_dependency_checker_mode = "off", deps = [ "//src/java/io/bazel/rulesscala/io_utils", - "//third_party/dependency_analyzer/src/main:dependency_analyzer", - "//third_party/utils/src/test:test_util", - "@io_bazel_rules_scala_scala_compiler", - "@io_bazel_rules_scala_scala_library", - "@io_bazel_rules_scala_scala_reflect", + "//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix, + "//third_party/utils/src/test:test_util" + version_suffix, + "@io_bazel_rules_scala_scala_compiler" + version_suffix, + "@io_bazel_rules_scala_scala_library" + version_suffix, + "@io_bazel_rules_scala_scala_reflect" + version_suffix, ], ) @@ -68,12 +68,12 @@ def analyzer_tests_scala_2(): ], unused_dependency_checker_mode = "off", deps = [ - "//third_party/dependency_analyzer/src/main:dependency_analyzer", - "//third_party/utils/src/test:test_util", + "//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix, + "//third_party/utils/src/test:test_util" + version_suffix, "@com_google_guava_guava_21_0_with_file//jar", - "@io_bazel_rules_scala_scala_compiler", - "@io_bazel_rules_scala_scala_library", - "@io_bazel_rules_scala_scala_reflect", + "@io_bazel_rules_scala_scala_compiler" + version_suffix, + "@io_bazel_rules_scala_scala_library" + version_suffix, + "@io_bazel_rules_scala_scala_reflect" + version_suffix, "@org_apache_commons_commons_lang_3_5_without_file//:linkable_org_apache_commons_commons_lang_3_5_without_file", ], ) @@ -89,11 +89,11 @@ def analyzer_tests_scala_2(): ], unused_dependency_checker_mode = "off", deps = [ - "//third_party/dependency_analyzer/src/main:dependency_analyzer", - "//third_party/utils/src/test:test_util", - "@io_bazel_rules_scala_scala_compiler", - "@io_bazel_rules_scala_scala_library", - "@io_bazel_rules_scala_scala_reflect", + "//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix, + "//third_party/utils/src/test:test_util" + version_suffix, + "@io_bazel_rules_scala_scala_compiler" + version_suffix, + "@io_bazel_rules_scala_scala_library" + version_suffix, + "@io_bazel_rules_scala_scala_reflect" + version_suffix, "@org_apache_commons_commons_lang_3_5_without_file//:linkable_org_apache_commons_commons_lang_3_5_without_file", ], ) diff --git a/third_party/dependency_analyzer/src/test/analyzer_test_scala_3.bzl b/third_party/dependency_analyzer/src/test/analyzer_test_scala_3.bzl index d25938271..0377dfeef 100644 --- a/third_party/dependency_analyzer/src/test/analyzer_test_scala_3.bzl +++ b/third_party/dependency_analyzer/src/test/analyzer_test_scala_3.bzl @@ -1,13 +1,13 @@ load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") -def analyzer_tests_scala_3(): +def analyzer_tests_scala_3(version_suffix): common_jvm_flags = [ - "-Dplugin.jar.location=$(execpath //third_party/dependency_analyzer/src/main:dependency_analyzer)", - "-Dscala.library.location=$(rootpath @io_bazel_rules_scala_scala_library)", + "-Dplugin.jar.location=$(execpath //third_party/dependency_analyzer/src/main:dependency_analyzer%s)" % version_suffix, + "-Dscala.library.location=$(rootpath @io_bazel_rules_scala_scala_library%s)" % version_suffix, # Scala 2 standard library is required for compilation. # Without it compilation fails with error: # class dotty.tools.dotc.core.Symbols$NoSymbol$ cannot be cast to class dotty.tools.dotc.core.Symbols$ClassSymbol - "-Dscala.library2.location=$(rootpath @io_bazel_rules_scala_scala_library_2)", + "-Dscala.library2.location=$(rootpath @io_bazel_rules_scala_scala_library_2%s)" % version_suffix, ] scala_test( @@ -19,9 +19,9 @@ def analyzer_tests_scala_3(): ], deps = [ "//scala/private/toolchain_deps:scala_compile_classpath", - "//third_party/dependency_analyzer/src/main:dependency_analyzer", - "//third_party/utils/src/test:test_util", - "@io_bazel_rules_scala_scala_library", - "@io_bazel_rules_scala_scala_library_2", + "//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix, + "//third_party/utils/src/test:test_util" + version_suffix, + "@io_bazel_rules_scala_scala_library" + version_suffix, + "@io_bazel_rules_scala_scala_library_2" + version_suffix, ], ) diff --git a/third_party/utils/src/test/BUILD b/third_party/utils/src/test/BUILD index 39f558e99..c44b70f8d 100644 --- a/third_party/utils/src/test/BUILD +++ b/third_party/utils/src/test/BUILD @@ -1,19 +1,23 @@ load("//scala:scala.bzl", "scala_library") -load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION") +load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_VERSIONS") +load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "version_suffix") licenses(["notice"]) # 3-clause BSD -scala_library( - name = "test_util", - srcs = ([ - "io/bazel/rulesscala/utils/JavaCompileUtil.scala", - "io/bazel/rulesscala/utils/TestUtil.scala", - ] if SCALA_MAJOR_VERSION.startswith("2") else [ - "io/bazel/rulesscala/utils/Scala3CompilerUtils.scala", - ]), - visibility = ["//visibility:public"], - deps = [ - "//scala/private/toolchain_deps:scala_compile_classpath", - "//third_party/dependency_analyzer/src/main:dependency_analyzer", - ], -) +[ + scala_library( + name = "test_util" + version_suffix(scala_version), + srcs = ([ + "io/bazel/rulesscala/utils/JavaCompileUtil.scala", + "io/bazel/rulesscala/utils/TestUtil.scala", + ] if scala_version.startswith("2") else [ + "io/bazel/rulesscala/utils/Scala3CompilerUtils.scala", + ]), + visibility = ["//visibility:public"], + deps = [ + "//scala/private/toolchain_deps:scala_compile_classpath", + "//third_party/dependency_analyzer/src/main:dependency_analyzer" + version_suffix(scala_version), + ], + ) + for scala_version in SCALA_VERSIONS +]