Skip to content

Commit 7d88e0e

Browse files
jhnjjohnynek
authored andcommitted
Compile with unused dependency checker (bazelbuild#579)
* Compile with unused-deps-checker=error * no default params in _lib * Use strict-deps if both strict- and unused-deps are on * Better comment * naming * Readd util_core+util_logging to scrooge_support * Add exports to unused-deps-ignored * third_party/ unused dep checker off * Linter * disable unused-deps checker for _suite rules * remove unnecessary unused-deps=off * Add removed deps as runtime deps
1 parent 741281d commit 7d88e0e

File tree

17 files changed

+73
-24
lines changed

17 files changed

+73
-24
lines changed

WORKSPACE

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ filegroup(
9797
path = "third_party/test/new_local_repo",
9898
)
9999

100-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
100+
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_unused_deps_toolchains")
101101

102-
scala_register_toolchains()
102+
scala_register_unused_deps_toolchains()
103103

104104
load("//scala:scala_maven_import_external.bzl", "scala_maven_import_external", "java_import_external")
105105

jmh/jmh.bzl

+3
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ def scala_benchmark_jmh(**kw):
122122
resources = kw.get("resources", []),
123123
resource_jars = kw.get("resource_jars", []),
124124
visibility = ["//visibility:public"],
125+
unused_dependency_checker_mode = "off",
125126
)
126127

127128
codegen = name + "_codegen"
@@ -136,6 +137,7 @@ def scala_benchmark_jmh(**kw):
136137
lib,
137138
],
138139
resource_jars = ["%s_resources.jar" % codegen],
140+
unused_dependency_checker_mode = "off",
139141
)
140142
scala_binary(
141143
name = name,
@@ -145,4 +147,5 @@ def scala_benchmark_jmh(**kw):
145147
compiled_lib,
146148
],
147149
main_class = main_class,
150+
unused_dependency_checker_mode = "off",
148151
)

scala/BUILD

+13
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@ toolchain(
2222
visibility = ["//visibility:public"],
2323
)
2424

25+
scala_toolchain(
26+
name = "unused_dependency_checker_error_toolchain_impl",
27+
unused_dependency_checker_mode = "error",
28+
visibility = ["//visibility:public"],
29+
)
30+
31+
toolchain(
32+
name = "unused_dependency_checker_error_toolchain",
33+
toolchain = ":unused_dependency_checker_error_toolchain_impl",
34+
toolchain_type = "@io_bazel_rules_scala//scala:toolchain_type",
35+
visibility = ["//visibility:public"],
36+
)
37+
2538
java_import(
2639
name = "bazel_test_runner_deploy",
2740
jars = ["@bazel_tools//tools/jdk:TestRunner_deploy.jar"],

scala/private/rule_impls.bzl

+26-14
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,6 @@ CurrentTarget: {current_target}
189189
indirect_targets = indirect_targets,
190190
current_target = current_target)
191191

192-
if unused_dependency_checker_mode != "off":
193-
fail(
194-
"Using both --strict_java_deps and unused-dependency-checker at the same time is not allowed"
195-
)
196-
197192
elif unused_dependency_checker_mode != "off":
198193
unused_dependency_plugin = ctx.attr._unused_dependency_checker_plugin
199194
plugins = depset(transitive = [plugins, unused_dependency_plugin.files])
@@ -380,6 +375,11 @@ def _compile_or_empty(
380375
java_srcs = [
381376
f for f in ctx.files.srcs if f.basename.endswith(_java_extension)
382377
]
378+
# We are not able to verify whether dependencies are used when compiling java sources
379+
# Thus we disable unused dependency checking when java sources are found
380+
if len(java_srcs) != 0:
381+
unused_dependency_checker_mode = "off"
382+
383383
sources = [
384384
f for f in ctx.files.srcs if f.basename.endswith(_scala_extension)
385385
] + java_srcs
@@ -578,7 +578,8 @@ def _collect_jars_from_common_ctx(ctx,
578578
jars2labels = jars2labels,
579579
transitive_compile_jars = transitive_compile_jars)
580580

581-
def _lib(ctx, base_classpath, non_macro_lib, unused_dependency_checker_mode):
581+
def _lib(ctx, base_classpath, non_macro_lib, unused_dependency_checker_mode,
582+
unused_dependency_checker_ignored_targets):
582583
# Build up information from dependency-like attributes
583584

584585
# This will be used to pick up srcjars from non-scala library
@@ -604,7 +605,8 @@ def _lib(ctx, base_classpath, non_macro_lib, unused_dependency_checker_mode):
604605
jars.jars2labels.jars_to_labels, [],
605606
unused_dependency_checker_mode = unused_dependency_checker_mode,
606607
unused_dependency_checker_ignored_targets = [
607-
target.label for target in base_classpath
608+
target.label for target in base_classpath + ctx.attr.exports +
609+
unused_dependency_checker_ignored_targets
608610
])
609611

610612
transitive_rjars = depset(outputs.full_jars, transitive = [transitive_rjars])
@@ -655,15 +657,17 @@ def scala_library_impl(ctx):
655657
scalac_provider = ctx.attr._scala_provider[_ScalacProvider]
656658
unused_dependency_checker_mode = get_unused_dependency_checker_mode(ctx)
657659
return _lib(ctx, scalac_provider.default_classpath, True,
658-
unused_dependency_checker_mode)
660+
unused_dependency_checker_mode,
661+
ctx.attr.unused_dependency_checker_ignored_targets)
659662

660663
def scala_library_for_plugin_bootstrapping_impl(ctx):
661664
scalac_provider = ctx.attr._scala_provider[_ScalacProvider]
662665
return _lib(
663666
ctx,
664667
scalac_provider.default_classpath,
665668
True,
666-
unused_dependency_checker_mode = "off")
669+
unused_dependency_checker_mode = "off",
670+
unused_dependency_checker_ignored_targets = [])
667671

668672
def scala_macro_library_impl(ctx):
669673
scalac_provider = ctx.attr._scala_provider[_ScalacProvider]
@@ -672,7 +676,8 @@ def scala_macro_library_impl(ctx):
672676
ctx,
673677
scalac_provider.default_macro_classpath,
674678
False, # don't build the ijar for macros
675-
unused_dependency_checker_mode)
679+
unused_dependency_checker_mode,
680+
ctx.attr.unused_dependency_checker_ignored_targets)
676681

677682
# Common code shared by all scala binary implementations.
678683
def _scala_binary_common(
@@ -750,7 +755,8 @@ def scala_binary_impl(ctx):
750755
wrapper,
751756
unused_dependency_checker_mode = unused_dependency_checker_mode,
752757
unused_dependency_checker_ignored_targets = [
753-
target.label for target in scalac_provider.default_classpath
758+
target.label for target in scalac_provider.default_classpath +
759+
ctx.attr.unused_dependency_checker_ignored_targets
754760
])
755761
_write_executable(
756762
ctx = ctx,
@@ -801,7 +807,8 @@ trap finish EXIT
801807
wrapper,
802808
unused_dependency_checker_mode = unused_dependency_checker_mode,
803809
unused_dependency_checker_ignored_targets = [
804-
target.label for target in scalac_provider.default_repl_classpath
810+
target.label for target in scalac_provider.default_repl_classpath +
811+
ctx.attr.unused_dependency_checker_ignored_targets
805812
])
806813
_write_executable(
807814
ctx = ctx,
@@ -831,7 +838,8 @@ def scala_test_impl(ctx):
831838

832839
unused_dependency_checker_mode = get_unused_dependency_checker_mode(ctx)
833840
unused_dependency_checker_ignored_targets = [
834-
target.label for target in scalac_provider.default_classpath
841+
target.label for target in scalac_provider.default_classpath +
842+
ctx.attr.unused_dependency_checker_ignored_targets
835843
]
836844
unused_dependency_checker_is_off = unused_dependency_checker_mode == "off"
837845

@@ -919,7 +927,11 @@ def scala_junit_test_impl(ctx):
919927

920928
unused_dependency_checker_mode = get_unused_dependency_checker_mode(ctx)
921929
unused_dependency_checker_ignored_targets = [
922-
target.label for target in scalac_provider.default_classpath
930+
target.label for target in scalac_provider.default_classpath +
931+
ctx.attr.unused_dependency_checker_ignored_targets
932+
] + [
933+
ctx.attr._junit.label, ctx.attr._hamcrest.label,
934+
ctx.attr.suite_label.label, ctx.attr._bazel_test_runner.label
923935
]
924936
unused_dependency_checker_is_off = unused_dependency_checker_mode == "off"
925937

scala/scala.bzl

+6-2
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ _common_attrs.update({
143143
),
144144
allow_files = [".jar"],
145145
mandatory = False),
146+
"unused_dependency_checker_ignored_targets": attr.label_list(default = []),
146147
})
147148

148149
_library_attrs = {
@@ -440,7 +441,8 @@ def scala_test_suite(name,
440441
visibility = visibility,
441442
size = size,
442443
colors = colors,
443-
full_stacktraces = full_stacktraces)
444+
full_stacktraces = full_stacktraces,
445+
unused_dependency_checker_mode = "off")
444446
ts.append(n)
445447
native.test_suite(name = name, tests = ts, visibility = visibility)
446448

@@ -477,7 +479,8 @@ def scala_library_suite(name,
477479
jvm_flags = jvm_flags,
478480
print_compile_time = print_compile_time,
479481
visibility = visibility,
480-
exports = exports)
482+
exports = exports,
483+
unused_dependency_checker_mode = "off")
481484
ts.append(n)
482485
scala_library(
483486
name = name, deps = ts, exports = exports + ts, visibility = visibility)
@@ -519,6 +522,7 @@ def scala_specs2_junit_test(name, **kwargs):
519522
scala_junit_test(
520523
name = name,
521524
deps = _specs2_junit_dependencies() + kwargs.pop("deps", []),
525+
unused_dependency_checker_ignored_targets = _specs2_junit_dependencies(),
522526
suite_label = Label(
523527
"//src/java/io/bazel/rulesscala/specs2:specs2_test_discovery"),
524528
suite_class = "io.bazel.rulesscala.specs2.Specs2DiscoveredTestSuite",

scala/toolchains.bzl

+4
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
def scala_register_toolchains():
22
native.register_toolchains("@io_bazel_rules_scala//scala:default_toolchain")
3+
4+
def scala_register_unused_deps_toolchains():
5+
native.register_toolchains(
6+
"@io_bazel_rules_scala//scala:unused_dependency_checker_error_toolchain")

scala_proto/scala_proto.bzl

+1
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,7 @@ def scalapb_proto_library(name,
496496
scala_library(
497497
name = name,
498498
deps = [srcjar] + external_deps,
499+
unused_dependency_checker_ignored_targets = [srcjar] + external_deps,
499500
exports = external_deps,
500501
visibility = visibility,
501502
)

src/scala/io/bazel/rules_scala/jmh_support/BUILD

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ scala_library(
44
name = "benchmark_generator_lib",
55
srcs = ["BenchmarkGenerator.scala"],
66
visibility = ["//visibility:public"],
7+
runtime_deps = [
8+
"//external:io_bazel_rules_scala/dependency/jmh/org_ows2_asm_asm",
9+
],
710
deps = [
811
"//external:io_bazel_rules_scala/dependency/jmh/jmh_core",
912
"//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_asm",
1013
"//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_reflection",
11-
"//external:io_bazel_rules_scala/dependency/jmh/org_ows2_asm_asm",
12-
"//src/java/io/bazel/rulesscala/io_utils",
1314
"//src/java/io/bazel/rulesscala/jar",
1415
],
1516
)

src/scala/io/bazel/rules_scala/scrooge_support/BUILD

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ load("//scala:scala.bzl", "scala_library")
33
scala_library(
44
name = "compiler",
55
srcs = ["Compiler.scala"],
6+
# util_core is still needed as a dep for older versions of scrooge
7+
unused_dependency_checker_mode = "off",
68
visibility = ["//visibility:public"],
79
deps = [
810
":focused_zip_importer",

src/scala/scripts/BUILD

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ scala_library(
3232
name = "scalapb_generator_lib",
3333
srcs = ["ScalaPBGenerator.scala"],
3434
visibility = ["//visibility:public"],
35+
runtime_deps = [
36+
"//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
37+
],
3538
deps = [
3639
":scala_proto_request_extractor",
37-
"//external:io_bazel_rules_scala/dependency/com_google_protobuf/protobuf_java",
3840
"//external:io_bazel_rules_scala/dependency/proto/protoc",
3941
"//external:io_bazel_rules_scala/dependency/proto/protoc_bridge",
4042
"//external:io_bazel_rules_scala/dependency/proto/scalapb_plugin",

test/BUILD

+2
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ scala_binary(
475475
name = "ScalaBinary_with_fake",
476476
srcs = ["ScalaBinary.scala"],
477477
main_class = "scalarules.test.ScalaBinary",
478+
unused_dependency_checker_mode = "off",
478479
deps = [
479480
":HelloLib",
480481
":MacroTest",
@@ -504,6 +505,7 @@ scala_binary(
504505
name = "ScalaBinary_with_service_manifest_srcs",
505506
srcs = ["A.scala"],
506507
main_class = "scalarules.test.A",
508+
unused_dependency_checker_mode = "off",
507509
deps = [
508510
"//test/example_jars:example_jar1",
509511
"//test/example_jars:example_jar2",

test/src/main/scala/scalarules/test/large_classpath/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ scala_binary(
55
name = "largeClasspath",
66
srcs = ["ObjectWithLargeClasspath.scala"],
77
main_class = "scalarules.test.large_classpath.ObjectWithLargeClasspath",
8+
unused_dependency_checker_mode = "off",
89
visibility = ["//visibility:public"],
910
deps = get_dependency_labels(
1011
amount = 250,

test/src/main/scala/scalarules/test/resources/BUILD

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ scala_specs2_junit_test(
2020
size = "small",
2121
srcs = ["ScalaLibOnlyResourcesTest.scala"],
2222
suffixes = ["Test"],
23+
unused_dependency_checker_mode = "off",
2324
deps = [":noSrcsWithDirectFileResources"],
2425
)
2526

@@ -28,6 +29,7 @@ scala_specs2_junit_test(
2829
size = "small",
2930
srcs = ["ScalaLibOnlyResourcesFilegroupTest.scala"],
3031
suffixes = ["Test"],
32+
unused_dependency_checker_mode = "off",
3133
deps = [":noSrcsWithFilegroupResources"],
3234
)
3335

test/src/main/scala/scalarules/test/resources/strip/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ scala_specs2_junit_test(
1111
size = "small",
1212
srcs = ["ResourceStripPrefixTest.scala"],
1313
suffixes = ["Test"],
14+
unused_dependency_checker_mode = "off",
1415
deps = [":noSrcsWithResources"],
1516
)

test_version/WORKSPACE.template

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ load("@io_bazel_rules_scala//specs2:specs2_junit.bzl", "specs2_junit_repositorie
3131

3232
specs2_junit_repositories(scala_version)
3333

34-
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
34+
load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_unused_deps_toolchains")
3535

36-
scala_register_toolchains()
36+
scala_register_unused_deps_toolchains()
3737

3838
http_archive(
3939
name = "com_google_protobuf",

third_party/dependency_analyzer/src/test/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ scala_junit_test(
1515
"-Dapache.commons.jar.location=$(location @org_apache_commons_commons_lang_3_5_without_file//:linkable_org_apache_commons_commons_lang_3_5_without_file)",
1616
],
1717
suffixes = ["Test"],
18+
unused_dependency_checker_mode = "off",
1819
deps = [
1920
"//external:io_bazel_rules_scala/dependency/scala/scala_compiler",
2021
"//external:io_bazel_rules_scala/dependency/scala/scala_library",

third_party/unused_dependency_checker/src/test/BUILD

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ scala_test(
1313
"-Dscala.library.location=$(location //external:io_bazel_rules_scala/dependency/scala/scala_library)",
1414
"-Dapache.commons.jar.location=$(location @org_apache_commons_commons_lang_3_5_without_file//:linkable_org_apache_commons_commons_lang_3_5_without_file)",
1515
],
16+
unused_dependency_checker_mode = "off",
1617
deps = [
1718
"//external:io_bazel_rules_scala/dependency/scala/scala_compiler",
1819
"//external:io_bazel_rules_scala/dependency/scala/scala_library",
1920
"//external:io_bazel_rules_scala/dependency/scala/scala_reflect",
2021
"//third_party/unused_dependency_checker/src/main:unused_dependency_checker",
2122
"//third_party/utils/src/test:test_util",
22-
"@com_google_guava_guava_21_0_with_file//jar",
2323
"@org_apache_commons_commons_lang_3_5_without_file//:linkable_org_apache_commons_commons_lang_3_5_without_file",
2424
],
2525
)

0 commit comments

Comments
 (0)