diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java b/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java index c59458442d0..589542587e8 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java @@ -72,22 +72,24 @@ public static ErrorProneAnalyzer createAnalyzer( refactoringCollection[0] = RefactoringCollection.refactor(epOptions.patchingOptions(), context); // Refaster refactorer or using builtin checks - CodeTransformer codeTransformer = + Supplier codeTransformer = epOptions .patchingOptions() .customRefactorer() .or( - () -> { - 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()); - }) - .get(); + Suppliers.memoize( + () -> { + 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()); + })); return createWithCustomDescriptionListener( codeTransformer, epOptions, context, refactoringCollection[0]); @@ -160,15 +162,12 @@ private static Supplier scansPlugins( } static ErrorProneAnalyzer createWithCustomDescriptionListener( - CodeTransformer codeTransformer, + Supplier codeTransformer, ErrorProneOptions errorProneOptions, Context context, DescriptionListener.Factory descriptionListenerFactory) { return new ErrorProneAnalyzer( - Suppliers.ofInstance(codeTransformer), - errorProneOptions, - context, - descriptionListenerFactory); + codeTransformer, errorProneOptions, context, descriptionListenerFactory); } private ErrorProneAnalyzer(