Skip to content

Commit c4c2cbb

Browse files
Support tag-based opt-in/opt-out for unused dependencies checking
1 parent 3f373a3 commit c4c2cbb

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.google.devtools.build.lib.concurrent.BlazeInterners;
4242
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
4343
import com.google.devtools.build.lib.packages.TargetUtils;
44+
import com.google.devtools.build.lib.analysis.config.CoreOptionConverters.StrictDepsMode;
4445
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
4546
import com.google.devtools.build.lib.rules.java.JavaPluginInfo.JavaPluginData;
4647
import com.google.devtools.build.lib.rules.java.JavaToolchainProvider.JspecifyInfo;
@@ -294,7 +295,7 @@ && getJavaConfiguration().experimentalEnableJspecify()
294295
builder.setCompressJar(true);
295296
builder.setExtraData(computePerPackageData(ruleContext, javaToolchain));
296297
builder.setStrictJavaDeps(attributes.getStrictJavaDeps());
297-
builder.setUnusedDeps(getJavaConfiguration().getUnusedDeps());
298+
builder.setUnusedDeps(getUnusedDepsMode());
298299
semantics
299300
.getFixDepsTool(ruleContext.getRule(), getJavaConfiguration())
300301
.ifPresent(builder::setFixDepsTool);
@@ -580,4 +581,20 @@ private void createLocalOptimizationAction(
580581
private ImmutableList<String> getJavacOpts() {
581582
return customJavacOpts;
582583
}
584+
585+
private StrictDepsMode getUnusedDepsMode() {
586+
StrictDepsMode mode = getJavaConfiguration().getUnusedDeps();
587+
if (ruleContext.getRule() != null) {
588+
for (String tag : ruleContext.getRule().getRuleTags()) {
589+
if (tag.equalsIgnoreCase("unused-deps:off")) {
590+
return StrictDepsMode.OFF;
591+
} else if (tag.equalsIgnoreCase("unused-deps:warn")) {
592+
return StrictDepsMode.WARN;
593+
} else if (tag.equalsIgnoreCase("unused-deps:error")) {
594+
return StrictDepsMode.ERROR;
595+
}
596+
}
597+
}
598+
return mode;
599+
}
583600
}

src/test/java/com/google/devtools/build/lib/rules/java/JavaCompileActionBuilderTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,4 +299,42 @@ public void testUnusedDepsFlagPropagation() throws Exception {
299299
assertThat(JavaCompileActionTestHelper.getUnusedDepsMode(action))
300300
.isEqualTo(com.google.devtools.build.lib.analysis.config.CoreOptionConverters.StrictDepsMode.ERROR);
301301
}
302+
303+
@Test
304+
public void testUnusedDepsTagOptIn() throws Exception {
305+
// Global unused_deps is off by default
306+
scratch.file(
307+
"java/com/google/test/BUILD",
308+
"""
309+
load("@rules_java//java:defs.bzl", "java_library")
310+
java_library(
311+
name = "a",
312+
srcs = ["A.java"],
313+
tags = ["unused-deps:error"],
314+
)
315+
""");
316+
JavaCompileAction action =
317+
(JavaCompileAction) getGeneratingActionForLabel("//java/com/google/test:liba.jar");
318+
assertThat(JavaCompileActionTestHelper.getUnusedDepsMode(action))
319+
.isEqualTo(com.google.devtools.build.lib.analysis.config.CoreOptionConverters.StrictDepsMode.ERROR);
320+
}
321+
322+
@Test
323+
public void testUnusedDepsTagOptOut() throws Exception {
324+
useConfiguration("--experimental_unused_deps=error");
325+
scratch.file(
326+
"java/com/google/test/BUILD",
327+
"""
328+
load("@rules_java//java:defs.bzl", "java_library")
329+
java_library(
330+
name = "a",
331+
srcs = ["A.java"],
332+
tags = ["unused-deps:off"],
333+
)
334+
""");
335+
JavaCompileAction action =
336+
(JavaCompileAction) getGeneratingActionForLabel("//java/com/google/test:liba.jar");
337+
assertThat(JavaCompileActionTestHelper.getUnusedDepsMode(action))
338+
.isEqualTo(com.google.devtools.build.lib.analysis.config.CoreOptionConverters.StrictDepsMode.OFF);
339+
}
302340
}

0 commit comments

Comments
 (0)