diff options
Diffstat (limited to 'src/java_tools')
-rw-r--r-- | src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java | 68 |
1 files changed, 14 insertions, 54 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java index 70916c7ceb..63be47d1ab 100644 --- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java +++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java @@ -14,17 +14,14 @@ package com.google.devtools.build.buildjar.javac.plugins.errorprone; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.devtools.build.buildjar.InvalidCommandLineException; import com.google.devtools.build.buildjar.javac.plugins.BlazeJavaCompilerPlugin; import com.google.errorprone.ErrorProneAnalyzer; import com.google.errorprone.ErrorProneError; import com.google.errorprone.ErrorProneOptions; +import com.google.errorprone.ErrorPronePlugins; import com.google.errorprone.InvalidCommandLineOptionException; -import com.google.errorprone.bugpatterns.BugChecker; import com.google.errorprone.scanner.BuiltInCheckerSuppliers; import com.google.errorprone.scanner.ScannerSupplier; import com.sun.source.util.TaskEvent; @@ -38,14 +35,10 @@ import com.sun.tools.javac.util.JavacMessages; import com.sun.tools.javac.util.Log; import java.util.Arrays; import java.util.List; -import java.util.ServiceLoader; -import javax.tools.JavaFileManager; -import javax.tools.StandardLocation; /** - * A plugin for BlazeJavaCompiler that performs Error Prone analysis. - * Error Prone is a static analysis framework that we use to perform - * some simple static checks on Java code. + * A plugin for BlazeJavaCompiler that performs Error Prone analysis. Error Prone is a static + * analysis framework that we use to perform some simple static checks on Java code. */ public final class ErrorPronePlugin extends BlazeJavaCompilerPlugin { @@ -58,7 +51,7 @@ public final class ErrorPronePlugin extends BlazeJavaCompilerPlugin { public ErrorPronePlugin() { this.scannerSupplier = BuiltInCheckerSuppliers.errorChecks(); } - + /** * Constructs an {@link ErrorPronePlugin} with the set of checks that are enabled in {@code * scannerSupplier}. @@ -69,8 +62,6 @@ public final class ErrorPronePlugin extends BlazeJavaCompilerPlugin { private ErrorProneAnalyzer errorProneAnalyzer; private ErrorProneOptions epOptions; - // error-prone is enabled by default - private boolean enabled = true; /** Registers our message bundle. */ public static void setupMessageBundle(Context context) { @@ -93,36 +84,14 @@ public final class ErrorPronePlugin extends BlazeJavaCompilerPlugin { return Arrays.asList(epOptions.getRemainingArgs()); } - private static final Function<BugChecker, Class<? extends BugChecker>> GET_CLASS = - new Function<BugChecker, Class<? extends BugChecker>>() { - @Override - public Class<? extends BugChecker> apply(BugChecker input) { - return input.getClass(); - } - }; - @Override public void init(Context context, Log log, JavaCompiler compiler) { super.init(context, log, compiler); - if (!enabled) { // error-prone plugin is turned-off - return; - } - setupMessageBundle(context); - // TODO(cushon): Move this into error-prone proper - JavaFileManager fileManager = context.get(JavaFileManager.class); - // Search ANNOTATION_PROCESSOR_PATH if it's available, otherwise fallback to fileManager's - // own class loader. Unlike in annotation processor discovery, we never search CLASS_PATH. - ClassLoader loader = fileManager.hasLocation(StandardLocation.ANNOTATION_PROCESSOR_PATH) - ? fileManager.getClassLoader(StandardLocation.ANNOTATION_PROCESSOR_PATH) - : fileManager.getClass().getClassLoader(); - Iterable<BugChecker> extraBugCheckers = ServiceLoader.load(BugChecker.class, loader); - ScannerSupplier result = - scannerSupplier.plus( - ScannerSupplier.fromBugCheckerClasses( - Iterables.transform(extraBugCheckers, GET_CLASS))); + // load Error Prone plugins from the annotation processor classpath + ScannerSupplier result = ErrorPronePlugins.loadPlugins(scannerSupplier, context); if (epOptions != null) { try { @@ -137,25 +106,16 @@ public final class ErrorPronePlugin extends BlazeJavaCompilerPlugin { errorProneAnalyzer = ErrorProneAnalyzer.create(result.get()).init(context, epOptions); } - /** - * Run Error Prone analysis after performing dataflow checks. - */ + /** Run Error Prone analysis after performing dataflow checks. */ @Override public void postFlow(Env<AttrContext> env) { - if (enabled) { - try { - errorProneAnalyzer.finished(new TaskEvent(Kind.ANALYZE, env.toplevel, env.enclClass.sym)); - } catch (ErrorProneError e) { - e.logFatalError(log); - // let the exception propagate to javac's main, where it will cause the compilation to - // terminate with Result.ABNORMAL - throw e; - } + try { + errorProneAnalyzer.finished(new TaskEvent(Kind.ANALYZE, env.toplevel, env.enclClass.sym)); + } catch (ErrorProneError e) { + e.logFatalError(log); + // let the exception propagate to javac's main, where it will cause the compilation to + // terminate with Result.ABNORMAL + throw e; } } - - @VisibleForTesting - public boolean isEnabled() { - return enabled; - } } |