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 {}