From 9da2d5580e3939f97ef2e91278b330a56b5ed1fe Mon Sep 17 00:00:00 2001 From: Gijs de Jong Date: Tue, 5 Mar 2024 13:47:06 -0800 Subject: [PATCH] Ignore disabled checks passed to `-XepPatchChecks` Rather than throwing an `NoSuchElementException`. Fixes #3908. Fixes #4028 COPYBARA_INTEGRATE_REVIEW=https://github.com/google/error-prone/pull/4028 from PicnicSupermarket:gdejong/remove-disabled-checks 3a75f22f587cad5250648c646b01f292b3480784 PiperOrigin-RevId: 612956455 --- .../BaseErrorProneJavaCompiler.java | 6 ++-- .../errorprone/scanner/ScannerTest.java | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/check_api/src/main/java/com/google/errorprone/BaseErrorProneJavaCompiler.java b/check_api/src/main/java/com/google/errorprone/BaseErrorProneJavaCompiler.java index eff5d443bc9..1747559e0b0 100644 --- a/check_api/src/main/java/com/google/errorprone/BaseErrorProneJavaCompiler.java +++ b/check_api/src/main/java/com/google/errorprone/BaseErrorProneJavaCompiler.java @@ -224,12 +224,12 @@ static ErrorProneAnalyzer createAnalyzer( .customRefactorer() .or( () -> { - ScannerSupplier toUse = - ErrorPronePlugins.loadPlugins(scannerSupplier, context) - .applyOverrides(epOptions); + ScannerSupplier toUse = ErrorPronePlugins.loadPlugins(scannerSupplier, context); ImmutableSet namedCheckers = epOptions.patchingOptions().namedCheckers(); if (!namedCheckers.isEmpty()) { toUse = toUse.filter(bci -> namedCheckers.contains(bci.canonicalName())); + } else { + toUse = toUse.applyOverrides(epOptions); } return ErrorProneScannerTransformer.create(toUse.get()); }) diff --git a/core/src/test/java/com/google/errorprone/scanner/ScannerTest.java b/core/src/test/java/com/google/errorprone/scanner/ScannerTest.java index 39648b552df..92b818df62d 100644 --- a/core/src/test/java/com/google/errorprone/scanner/ScannerTest.java +++ b/core/src/test/java/com/google/errorprone/scanner/ScannerTest.java @@ -95,6 +95,35 @@ public void suppressionAnnotationIgnoredWithOptions() { .doTest(); } + @Test + public void dontRunPatchForDisabledChecks() { + compilationHelper + .addSourceLines( + "Test.java", + "import com.google.errorprone.scanner.ScannerTest.Foo;", + "class Test {", + " Foo foo;", + "}") + .setArgs("-XepPatchLocation:IN_PLACE", "-XepPatchChecks:", "-Xep:ShouldNotUseFoo:OFF") + .doTest(); + } + + @Test + public void dontRunPatchUnlessRequested() { + compilationHelper + .addSourceLines( + "Test.java", + "import com.google.errorprone.scanner.ScannerTest.Foo;", + "class Test {", + " Foo foo;", + "}") + .setArgs( + "-XepPatchLocation:IN_PLACE", + "-Xep:ShouldNotUseFoo:WARN", + "-XepPatchChecks:DeadException") + .doTest(); + } + @OkToUseFoo // Foo can use itself. But this shouldn't suppress errors on *usages* of Foo. public static final class Foo {}