diff --git a/check_api/src/main/java/com/google/errorprone/scanner/ScannerSupplier.java b/check_api/src/main/java/com/google/errorprone/scanner/ScannerSupplier.java index 92167d27b85..a0294b10198 100644 --- a/check_api/src/main/java/com/google/errorprone/scanner/ScannerSupplier.java +++ b/check_api/src/main/java/com/google/errorprone/scanner/ScannerSupplier.java @@ -17,6 +17,7 @@ package com.google.errorprone.scanner; import static com.google.common.collect.ImmutableListMultimap.flatteningToImmutableListMultimap; +import static java.util.function.Predicate.not; import com.google.common.base.Predicate; import com.google.common.base.Supplier; @@ -298,7 +299,7 @@ public ScannerSupplier plus(ScannerSupplier other) { public ScannerSupplier filter(Predicate predicate) { ImmutableSet disabled = getAllChecks().values().stream() - .filter(predicate.negate()) + .filter(bci -> disabled().contains(bci.canonicalName()) || !predicate.test(bci)) .map(BugCheckerInfo::canonicalName) .collect(ImmutableSet.toImmutableSet()); return new ScannerSupplierImpl(getAllChecks(), severities(), disabled, getFlags()); diff --git a/core/src/test/java/com/google/errorprone/ErrorProneJavaCompilerTest.java b/core/src/test/java/com/google/errorprone/ErrorProneJavaCompilerTest.java index 72cc7fa348d..a8de13a5a9b 100644 --- a/core/src/test/java/com/google/errorprone/ErrorProneJavaCompilerTest.java +++ b/core/src/test/java/com/google/errorprone/ErrorProneJavaCompilerTest.java @@ -486,6 +486,32 @@ class StringConstantWrapper { """); } + @Test + public void patchAllWithDisableAllChecks() throws IOException { + JavaFileObject fileObject = + createOnDiskFileObject( + "StringConstantWrapper.java", + """ + class StringConstantWrapper { + String s = "old-value"; + } + """); + + CompilationResult result = + doCompile( + Collections.singleton(fileObject), + Arrays.asList("-XepPatchChecks:", "-XepPatchLocation:IN_PLACE", "-XepDisableAllChecks"), + ImmutableList.of(AssignmentUpdater.class)); + assertThat(result.succeeded).isTrue(); + assertThat(Files.readString(Path.of(fileObject.toUri()))) + .isEqualTo( + """ + class StringConstantWrapper { + String s = "old-value"; + } + """); + } + @Test public void patchSingleWithCheckDisabled() throws IOException { JavaFileObject fileObject = diff --git a/core/src/test/java/com/google/errorprone/scanner/ScannerSupplierTest.java b/core/src/test/java/com/google/errorprone/scanner/ScannerSupplierTest.java index 80c753da94e..20272cbc1c8 100644 --- a/core/src/test/java/com/google/errorprone/scanner/ScannerSupplierTest.java +++ b/core/src/test/java/com/google/errorprone/scanner/ScannerSupplierTest.java @@ -243,7 +243,9 @@ public void filterWorks() { ScannerSupplier.fromBugCheckerClasses( ArrayEquals.class, BadShiftAmount.class, StaticQualifiedUsingExpression.class); - assertScanner(ss.filter(input -> input.canonicalName().equals("BadShiftAmount"))) + ScannerSupplier derivedSupplier = ss.filter(input -> !input.canonicalName().startsWith("S")); + assertScanner(derivedSupplier).hasEnabledChecks(ArrayEquals.class, BadShiftAmount.class); + assertScanner(derivedSupplier.filter(input -> !input.canonicalName().startsWith("A"))) .hasEnabledChecks(BadShiftAmount.class); }