Catch common Java mistakes as compile-time errors

Overview

Error Prone

Error Prone is a static analysis tool for Java that catches common programming mistakes at compile-time.

public class ShortSet {
  public static void main (String[] args) {
    Set<Short> s = new HashSet<>();
    for (short i = 0; i < 100; i++) {
      s.add(i);
      s.remove(i - 1);
    }
    System.out.println(s.size());
  }
}
error: [CollectionIncompatibleType] Argument 'i - 1' should not be passed to this method;
its type int is not compatible with its collection's type argument Short
      s.remove(i - 1);
              ^
    (see https://errorprone.info/bugpattern/CollectionIncompatibleType)
1 error

Getting Started

Our documentation is at errorprone.info.

Error Prone works with Bazel, Maven, Ant, and Gradle. See our installation instructions for details.

Developing Error Prone

Developing and building Error Prone is documented on the wiki.

Links

Comments
  • JDK 14/15 compatibility

    JDK 14/15 compatibility

    What version of Error Prone are you using?

    2.3.4 (originally 2.3.1)

    Does this issue reproduce with the latest release?

    Yes

    What did you do?

    Error-prone does not work with JDK12 EA b09 and produces the following exception:

        [javac] 1 warning
        [javac] An exception has occurred in the compiler (12-ea). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
        [javac] java.lang.NoSuchMethodError: com.sun.tools.javac.util.Log.error(Lcom/sun/tools/javac/util/JCDiagnostic$DiagnosticPosition;Ljava/lang/String;[Ljava/lang/Object;)V
        [javac] 	at com.google.errorprone.ErrorProneError.logFatalError(ErrorProneError.java:55)
        [javac] 	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:155)
        [javac] 	at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
        [javac] 	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418)
        [javac] 	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1365)
        [javac] 	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:960)
        [javac] 	at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:311)
        [javac] 	at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:170)
        [javac] 	at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
        [javac] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        [javac] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        [javac] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        [javac] 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        [javac] 	at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:57)
        [javac] 	at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1404)
        [javac] 	at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:1133)
        [javac] 	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        [javac] 	at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        [javac] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        [javac] 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        [javac] 	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        [javac] 	at org.apache.tools.ant.Task.perform(Task.java:350)
        [javac] 	at org.apache.tools.ant.Target.execute(Target.java:449)
        [javac] 	at org.apache.tools.ant.Target.performTasks(Target.java:470)
        [javac] 	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1388)
        [javac] 	at org.apache.tools.ant.Project.executeTarget(Project.java:1361)
        [javac] 	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        [javac] 	at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
        [javac] 	at org.apache.tools.ant.Main.runBuild(Main.java:834)
        [javac] 	at org.apache.tools.ant.Main.startAnt(Main.java:223)
        [javac] 	at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
        [javac] 	at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
    

    It works fine with previous build (JDK 12 EA b08). I don't know what change causes this error.

    opened by don-vip 48
  • Full Java 8 support

    Full Java 8 support

    Original issue created by [email protected] on 2014-03-27 at 04:19 PM


    Right now we have a build for javac 8 but are missing two important items needed for full support:

    1. Our Jenkins continuous build does not run Java 8 yet, only 6 and 7.

    2. We don't yet distribute the error-prone 8 jars to Sonatype. We probably want to distribute two sets of jars, one for versions 6 and 7, and one for 8. It would be nice if Maven could figure out which dependency to use based on the version of javac installed.

    Priority-High migrated Status-Accepted 
    opened by cushon 26
  • 'An illegal reflective access operation has occurred' warnings

    'An illegal reflective access operation has occurred' warnings

    The warning:

    Changes detected - recompiling the module!
    Compiling 8 source files to /home/my_stuff/target/classes
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.google.errorprone.bugpatterns.FutureReturnValueIgnored (file:/my_home/.m2/repository/com/google/errorprone/error_prone_core/2.3.2/error_prone_core-2.3.2.jar) to field com.sun.tools.javac.code.Type$StructuralTypeMapping$4.this$0
    WARNING: Please consider reporting this to the maintainers of com.google.errorprone.bugpatterns.FutureReturnValueIgnored
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    
    $ java --version
    openjdk 11.0.1 2018-10-16
    OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
    OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
    

    Java code that (rightfully) triggers the warning:

    @SuppressWarnings("FutureReturnValueIgnored")
    private void schedule(Runnable runnable, long delayMs) {
        try {
            scheduledExecutorService.schedule(runnable, delayMs, TimeUnit.MILLISECONDS);
        } catch (RejectedExecutionException ex) {
            // shutting down, no more checks
        }
    }
    

    I'm using the maven plugin as such:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
            <release>11</release>
            <debug>true</debug>
            <showDeprecation>true</showDeprecation>
            <showWarnings>true</showWarnings>
            <compilerArgument>-parameters</compilerArgument>
            <compilerArgs>
                <arg>-Xlint:all</arg>
                <arg>-Xlint:-processing</arg>
                <arg>-Werror</arg>
                <arg>-XDcompilePolicy=simple</arg>
                <arg>-Xplugin:ErrorProne</arg> 
            </compilerArgs>
            <annotationProcessorPaths>
                <path>
                    <groupId>com.google.errorprone</groupId>
                    <artifactId>error_prone_core</artifactId>
                    <version>2.3.2</version>
                </path>
            </annotationProcessorPaths> 
        </configuration>
    </plugin>
    
    opened by zimmi 24
  • lombok causes an IndexOutOfBoundsException in ParameterName

    lombok causes an IndexOutOfBoundsException in ParameterName

    After #690 was fixed, I removed the exclusions for the problematic bug patterns and tried to compile a project using Lombok, but it looks like the new bug pattern ParameterName also does not work well with Lombok it seems. Next time I'll make sure to try out Error Prone snapshots before a release :)

    Versions

    Error Prone version: 2.1.2 Lombok version: 1.16.18 / 1.16.16 Maven version: Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T04:39:06+09:00) Java version: 1.8.0_144, vendor: Oracle Corporation

    Note that I am also able to reproduce the issue with JDK 9.

    Reproducing Class:

    import lombok.Data;
    
    @Data
    public class SomeData {}
    

    Stack trace

    [ERROR]      Please report this at https://github.com/google/error-prone/issues/new and include the following:
    [ERROR]   
    [ERROR]      error-prone version: 2.1.2
    [ERROR]      Stack Trace:
    [ERROR]      java.lang.IndexOutOfBoundsException
    [ERROR]         at java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:580)
    [ERROR]         at java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:42)
    [ERROR]         at com.google.errorprone.bugpatterns.ParameterName.checkArguments(ParameterName.java:85)
    [ERROR]         at com.google.errorprone.bugpatterns.ParameterName.matchMethodInvocation(ParameterName.java:64)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:907)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
    [ERROR]         at com.sun.source.util.TreeScanner.visitUnary(TreeScanner.java:612)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitUnary(ErrorProneScanner.java:1126)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitUnary(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCUnary.accept(JCTree.java:1956)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
    [ERROR]         at com.sun.source.util.TreeScanner.visitIf(TreeScanner.java:418)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:758)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1427)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
    [ERROR]         at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
    [ERROR]         at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
    [ERROR]         at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:530)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
    [ERROR]         at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
    [ERROR]         at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:898)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
    [ERROR]         at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
    [ERROR]         at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
    [ERROR]         at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
    [ERROR]         at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:590)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)
    [ERROR]         at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
    [ERROR]         at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
    [ERROR]         at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:605)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:146)
    [ERROR]         at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
    [ERROR]         at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
    [ERROR]         at com.google.errorprone.scanner.Scanner.scan(Scanner.java:64)
    [ERROR]         at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:41)
    [ERROR]         at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:145)
    [ERROR]         at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
    [ERROR]         at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1425)
    [ERROR]         at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1374)
    [ERROR]         at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973)
    [ERROR]         at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
    [ERROR]         at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
    [ERROR]         at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
    [ERROR]         at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
    [ERROR]         at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
    [ERROR]         at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
    [ERROR]         at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:118)
    [ERROR]         at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:222)
    [ERROR]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [ERROR]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [ERROR]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [ERROR]         at java.lang.reflect.Method.invoke(Method.java:498)
    [ERROR]         at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
    [ERROR]         at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1075)
    [ERROR]         at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168)
    [ERROR]         at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    [ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    [ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
    [ERROR]         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
    [ERROR]         at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
    [ERROR]         at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
    [ERROR]         at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    [ERROR]         at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    [ERROR]         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
    [ERROR]         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
    [ERROR]         at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
    [ERROR]         at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
    [ERROR]         at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
    [ERROR]         at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
    [ERROR]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [ERROR]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [ERROR]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [ERROR]         at java.lang.reflect.Method.invoke(Method.java:498)
    [ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    [ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    [ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    [ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    [ERROR]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [ERROR]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [ERROR]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [ERROR]         at java.lang.reflect.Method.invoke(Method.java:498)
    [ERROR]         at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39)
    [ERROR]         at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122)
    [ERROR]         at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:50)
    

    Workaround

    Disable the newly introduced ParameterName bug pattern via a compiler argument: -Xep:ParameterName:OFF

    lombok 
    opened by shakuzen 24
  • NullPointerException in 2.1.1 in Android compilation

    NullPointerException in 2.1.1 in Android compilation

    I can't see an obvious check that's failing here. This is compiling an Android application.

    3 warnings
    An exception has occurred in the compiler (1.8.0_112-release). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
    java.lang.NullPointerException
    	at com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1233)
    	at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1628)
    	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
    	at com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:393)
    	at com.sun.tools.javac.tree.TreeScanner.visitExec(TreeScanner.java:213)
    	at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1446)
    	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
    	at com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:393)
    	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
    	at com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitBlock(Flow.java:995)
    	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1014)
    	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
    	at com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:393)
    	at com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitMethodDef(Flow.java:962)
    	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:866)
    	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
    	at com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:393)
    	at com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitClassDef(Flow.java:925)
    	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:774)
    	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
    	at com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:393)
    	at com.sun.tools.javac.comp.Flow$FlowAnalyzer.analyzeTree(Flow.java:1325)
    	at com.sun.tools.javac.comp.Flow$FlowAnalyzer.analyzeTree(Flow.java:1315)
    	at com.sun.tools.javac.comp.Flow.analyzeTree(Flow.java:213)
    	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1410)
    	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1374)
    	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973)
    	at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
    	at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
    	at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
    	at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
    	at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
    	at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
    	at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:118)
    	at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:65)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at net.ltgt.gradle.errorprone.ErrorProneCompiler.execute(ErrorProneCompiler.java:76)
    	at net.ltgt.gradle.errorprone.ErrorProneCompiler.execute(ErrorProneCompiler.java:26)
    	at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:104)
    	at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:53)
    	at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
    	at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
    	at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
    	at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:206)
    	at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:187)
    	at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:130)
    	at com.android.build.gradle.tasks.factory.AndroidJavaCompile.compile(AndroidJavaCompile.java:49)
    	at sun.reflect.GeneratedMethodAccessor1187.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163)
    	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
    	at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
    	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228)
    	at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
    	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
    	at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:228)
    	at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
    	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:77)
    	at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:58)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    
     FAILED
    
    FAILURE: Build failed with an exception.
    
    opened by leepa 24
  • Infinite compilation on JDK11

    Infinite compilation on JDK11

    When upgrading to JDK 11.01, the compilation never finishes but has high CPU activity. When removing ErrorProne, the compilation completes without a problem. I am unsure how to debug, e.g. to see what the javac process is doing, to provide more details.

    Environment:

    • JDK 11.01 (upgrading from 10+46)
    • Mac OS X Mojave
    • Gradle 5.0
    • ErrorProne:
      • core: 2.3.2
      • javac: 9+181-r4173-1
      • plugin: 0.6
    • Annotation Processors:
      • autoFactory: 1.0-beta6
      • autoValue: 1.6.3
      • autoValueBuilder: 2.9.1

    Of course if I disable the annotation processors then it fails due to the missing generated classes, but does terminate. Removing autoFactory leads to the hang, while autoValue is used too frequently to get a hang prior. So there is a chance that it is related to annotation processing (such as due to Gradle's incremental support), but could be something else.

    opened by ben-manes 21
  • Lombok breaks NestedInstanceOfConditions and InstanceOfAndCastMatchWrongType

    Lombok breaks NestedInstanceOfConditions and InstanceOfAndCastMatchWrongType

    Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T15:39:06-04:00) Java version: 1.8.0_131, vendor: Oracle Corporation Lombok version: 1.16.16

    java.lang.NullPointerException
            at lombok.javac.apt.LombokFileObjects.createEmpty(LombokFileObjects.java:123)
            at lombok.javac.apt.InterceptingJavaFileManager.getJavaFileForOutput(InterceptingJavaFileManager.java:47)
            at com.sun.tools.javac.processing.JavacFiler.createSourceOrClassFile(JavacFiler.java:478)
            at com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:417)
            at lombok.javac.apt.LombokProcessor.forceNewRound(LombokProcessor.java:333)
            at lombok.javac.apt.LombokProcessor.process(LombokProcessor.java:322)
            at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:114)
            at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:164)
            at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.process(AnnotationProcessor.java:74)
            at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:968)
            at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:884)
            at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2200(JavacProcessingEnvironment.java:108)
            at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1204)
            at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1313)
            at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1267)
            at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:943)
            at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
            at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
            at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
            at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
            at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)
            at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)
            at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:118)
            at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:65)
            at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)
            at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:825)
            at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
            at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
            at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
            at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
            at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
            at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
            at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
            at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
            at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
            at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    
    error-prone version: 2.0.21                                                                                                                                                 
    Stack Trace:                                                                                                                                                                
    java.lang.ClassCastException: com.sun.tools.javac.tree.JCTree$JCBinary cannot be cast to com.sun.source.tree.ParenthesizedTree                                              
       at com.google.errorprone.bugpatterns.NestedInstanceOfConditions.matchIf(NestedInstanceOfConditions.java:53)                                                              
       at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:752)                                                                                   
       at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:146)                                                                                   
       at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1427)                                                                                                         
       at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)                                                                                                     
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)                                                                                                           
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)                                                                                                           
       at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)                                                                                                            
       at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)                                                                                                      
       at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:530)                                                                                
       at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:146)                                                                                
       at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)                                                                                                      
       at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)                                                                                                     
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)                                                                                                           
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)                                                                                                           
       at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)                                                                                                    
       at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)                                                                                                     
       at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:898)                                                                               
       at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:146)                                                                               
       at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)                                                                                                  
       at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)                                                                                                     
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)                                                                                                           
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)                                                                                                           
       at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)                                                                                                    
       at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)                                                                                                            
       at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)                                                                                                   
       at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)                                                                                                      
       at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:590)                                                                                
       at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:146)                                                                                
       at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)                                                                                                   
       at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)                                                                                                     
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:82)                                                                                                           
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:42)                                                                                                           
       at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)                                                                                                            
       at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)                                                                                                   
       at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)                                                                                            
       at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:605)                                                                      
       at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:146)                                                                      
       at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)                                                                                             
       at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)                                                                                                     
       at com.google.errorprone.scanner.Scanner.scan(Scanner.java:64)                                                                                                           
       at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:41)                                                                
       at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:145)                                                                                        
       at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)                                                                                        
       at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1425)                                                                                                    
       at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1374)                                                                                                    
       at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973)                                                                                                  
       at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)                                                                                         
       at com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)                                                                                        
       at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)                                                                                                   
       at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)                                                                                                     
       at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:137)                                                                                     
       at com.google.errorprone.BaseErrorProneCompiler.run(BaseErrorProneCompiler.java:108)                                                                                     
       at com.google.errorprone.ErrorProneCompiler.run(ErrorProneCompiler.java:118)                                                                                             
       at com.google.errorprone.ErrorProneCompiler.compile(ErrorProneCompiler.java:65)                                                                                          
       at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:219)                               
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                                                                                                           
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)                                                                                         
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)                                                                                 
       at java.lang.reflect.Method.invoke(Method.java:498)                                                                                                                      
       at org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne.performCompile(JavacCompilerWithErrorProne.java:91)                                         
       at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:825)                                                                          
       at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)                                                                                          
       at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)                                                                     
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)                                                                                       
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)                                                                                       
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)                                                                                       
       at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)                                                              
       at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)                                                               
       at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)                                                 
       at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)                                                                               
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)                                                                                                        
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)                                                                                                        
       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)                                                                                                          
       at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)                                                                                                              
       at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)                                                                                                               
       at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)                                                                                                                 
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                                                                                                           
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)                                                                                         
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)                                                                                 
       at java.lang.reflect.Method.invoke(Method.java:498)                                                                                                                      
       at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)                                                                                   
       at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)                                                                                           
       at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)                                                                                 
       at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)                                                                                             
    
    opened by davidmontoyago 20
  • Upgrade javac to JDK10 to support classfile version 54

    Upgrade javac to JDK10 to support classfile version 54

    When running error-prone with JDK 10-ea+35 we get the following compilation warnings:

    [javac] warning: /modules/java.base/java/lang/Deprecated.class: major version 54 is newer than 53, the highest major version supported by this compiler.
    [javac]   It is recommended that the compiler be upgraded.
    

    for each class of the JDK. This is due to JDK-8188870: Bump classfile version number to 54.

    With the new release cycle, the compiler will have to be updated every 6 months to support the new classfile version.

    Maybe you could directly switch to JDK11 as classfile version 55 is coming soon, see JDK-8191913: Bump classfile version number to 55.

    opened by don-vip 19
  • Calling Map/Collection methods with arguments that are not compatible with type parameters

    Calling Map/Collection methods with arguments that are not compatible with type parameters

    Original issue created by [email protected] on 2013-03-05 at 03:23 PM


    There are some methods on Map<K,V> or Collection<V> that accept Object because of compatibility reasons, while in fact they should accept <V>. We can check that arguments passed to those methods are compatible with V.

    Example: Map<MyProto, Integer> map = ...; MyProto.Builder proto = MyProto.newBuilder()...; if (map.get(proto)) { ... };

    Following checks can be introduced for all "Map<K,V> map" and "T arg" variables:

    1. map.containsKey(arg) --> check that either "T extends K" or "T super K"
    2. map.containsValue(arg) --> check that either "T extends V" or "T super V"
    3. map.get(arg) --> check that either "T extends K" or "T super K"
    4. map.remove(arg) --> check that either "T extends K" or "T super K"

    Following checks can be introduced for all "Collection<V> coll" and "T arg" variables:

    1. coll.contains(arg) --> check that either "T extends V" or "T super V"
    2. coll.remove(arg) --> check that either "T extends V" or "T super V"

    Same for List.indexOf, List.lastIndexOf.

    Priority-High Type-NewCheck migrated Status-Accepted 
    opened by cushon 19
  • error_prone_core 2.0.6 adds Objects.requireNonNull() to source (which can crash Android)

    error_prone_core 2.0.6 adds Objects.requireNonNull() to source (which can crash Android)

    I've been using the error-prone compiler for my Android application. java.util.Objects was only added recently to Android (API 19). The most recent version of error_prone_core (2.0.6) can add Objects.requireNonNull() to the source, which causes the Android app to crash if run on an older device.

    I haven't been able to track down exactly how this happens; I'm not super familiar with error-prone's internals.

    I've been using error-prone via the gradle-errorprone-plugin for Android builds. By default it pulls in the latest error_prone_core for use. As a workaround you can force it to use 2.0.5.


    As an aside, the stack traces that result are quite mystifying since the source will contain no references to java.util.Objects. For example:

    Fatal Exception: java.lang.NoClassDefFoundError: java.util.Objects
           at com.trello.syncadapter.StarredBoardsSync.execute(StarredBoardsSync.java:66)
           at com.trello.syncadapter.StarredBoardsSync.performSync(StarredBoardsSync.java:58)
           at com.trello.syncadapter.TSyncAdapter.onPerformSync(TSyncAdapter.java:49)
           at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:254)
    

    ...Where StarredBoardsSync didn't even import java.util.Objects in the original source.

    opened by dlew 17
  • Checks on exception handling code

    Checks on exception handling code

    In our recent research paper with the title "Simple Testing Can Prevent Most Critical Failures", we found that a large number of the most deadly failures in production distributed systems are the result of trivial mistakes in exception handling code. Exception handling code is particularly critical to distributed systems as they're often the last line of defence. We observed three simple, yet deadly, bug patterns:

    • "TODO"/"FIXME" in the catch block
    • Empty catch block
    • Abort in exception over-catch

    We implemented a simple checker called Aspirator to detect these three types of mistakes, and it found and fixed hundreds of bugs from Hadoop, HBase, Spark, etc. HBase developers asked us to implement these checks into error-prone, therefore I'm providing these three checks in this pull request.

    Type-NewCheck cla: yes 
    opened by diy1 17
  • Make MemoizeConstantVisitorStateLookups check suppressible

    Make MemoizeConstantVisitorStateLookups check suppressible

    It's nice to be able to suppress this check, e.g., while you're initially prototyping a checker. I based my fix on the fix for #1650; hope it's the right approach.

    opened by msridhar 0
  • False positive for infinite recursion check on overloaded methods

    False positive for infinite recursion check on overloaded methods

    The infinite recursion check incorrectly reports infinite recursion in the following code:

    protected int findDirectoryGraphDistance(SourceFile a, SourceFile b) {
        return findDirectoryGraphDistance(a.getPath(), b.getPath());
    }
    
    protected int findDirectoryGraphDistance(FilePath a, FilePath b) {
        return 1234;
    }
    

    This is not even recursion, it's just a method calling another overloaded method with the same name but different types.

    I'm not sure why this happens, but one of the reasons could be that SourceFile is part of our own code base while FilePath is a library class. That might influence ErrorProne's ability to resolve parameter types.

    Sure, the quick fix would be to either rename one of the methods or to add a @SuppressWarnings, but for other users it would be nice if we can avoid this false positive altogether.

    opened by dennis-sig 1
  • Error Prone is not recoginizing the symbols and imports

    Error Prone is not recoginizing the symbols and imports

    Hi all. I am trying to add error prone to the EasyPost Java repo. Currently, I am using the below shell script to run the error prone check, however, the error prone would throw hundreds of errors saying cannot find the path and cannot recognize the import. Has anyone encountered this in the past? Any advice would be much appreciated!

    # This script must be used with Java 9+
    
    # Error Prone newer than 2.10.0 doesn't work on Java 8-10
    EP_VERSION="2.10.0"
    
    # Install needed jars
    wget -nc -q https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/${EP_VERSION?}/error_prone_core-${EP_VERSION?}-with-dependencies.jar
    wget -nc -q https://repo1.maven.org/maven2/org/checkerframework/dataflow-errorprone/3.15.0/dataflow-errorprone-3.15.0.jar
    wget -nc -q https://repo1.maven.org/maven2/com/google/code/findbugs/jFormatString/3.0.0/jFormatString-3.0.0.jar
    
    # Run Error Prone on the library and test suite
    javac \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
      -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
      -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
      -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
      -XDcompilePolicy=simple \
      -processorpath error_prone_core-${EP_VERSION?}-with-dependencies.jar:dataflow-errorprone-3.15.0.jar:jFormatString-3.0.0.jar \
      '-Xplugin:ErrorProne' \
      src/main/java/com/easypost/**/*.java
    

    Screen Shot 2023-01-03 at 6 54 06 PM

    opened by jchen293 6
  • refactor: refactor bad smell ToArrayCallWithZeroLengthArrayArgument

    refactor: refactor bad smell ToArrayCallWithZeroLengthArrayArgument

    Repairing Code Style Issues

    ToArrayCallWithZeroLengthArrayArgument

    The performance of the empty array version is the same, and sometimes even better, compared to the pre-sized version. Also, passing a pre-sized array is dangerous for a concurrent or synchronized collection as a data race is possible between the size and toArray calls. This may result in extra nulls at the end of the array if the collection was concurrently shrunk during the operation.

    See https://shipilev.net/blog/2016/arrays-wisdom-ancients/ for more details.

    Repairing Code Style Issues

    • ToArrayCallWithZeroLengthArrayArgument (1)
    opened by MartinWitt 0
  • ClassCanBeStatic: Exclude JUnit `@Nested` classes

    ClassCanBeStatic: Exclude JUnit `@Nested` classes

    Exclude inner classes annotated with JUnit's @Nested annotation from the ClassCanBeStatic check. JUnit requires them to not be static.

    From the JUnit docs:

    Only non-static nested classes (i.e. inner classes) can serve as @Nested test classes.

    Fixes #956.

    opened by ljrmorgan 1
Releases(v2.17.0)
Owner
Google
Google ❤️ Open Source
Google
Inria 1.4k Dec 29, 2022
Astra: a Java tool for analysing and refactoring Java source code

What is Astra? Astra is a Java tool for analysing and refactoring Java source code. For example: "References to type A should instead reference type B

Alfa 51 Dec 26, 2022
Reformats Java source code to comply with Google Java Style.

google-java-format google-java-format is a program that reformats Java source code to comply with Google Java Style. Using the formatter from the comm

Google 4.8k Dec 31, 2022
A static analyzer for Java, C, C++, and Objective-C

Infer Infer is a static analysis tool for Java, C++, Objective-C, and C. Infer is written in OCaml. Installation Read our Getting Started page for det

Facebook 13.7k Dec 28, 2022
:coffee: SonarSource Static Analyzer for Java Code Quality and Security

Code Quality and Security for Java This SonarSource project is a code analyzer for Java projects. Information about the analysis of Java features is a

SonarSource 976 Jan 5, 2023
SpotBugs is FindBugs' successor. A tool for static analysis to look for bugs in Java code.

SpotBugs is the spiritual successor of FindBugs, carrying on from the point where it left off with support of its community. SpotBugs is licensed unde

null 2.9k Jan 4, 2023
OpenGrok is a fast and usable source code search and cross reference engine, written in Java

Copyright (c) 2006, 2020 Oracle and/or its affiliates. All rights reserved. OpenGrok - a wicked fast source browser OpenGrok - a wicked fast source br

Oracle 3.8k Jan 8, 2023
A free injection hacked client for Minecraft using Java-agents

Swift Swift is a free and open-source injection hacked client base for Minecraft using Java-agents. Issues If you notice any bugs, you can let us know

static final 36 Oct 8, 2022
Java library for parsing report files from static code analysis.

Violations Lib This is a Java library for parsing report files like static code analysis. Example of supported reports are available here. A number of

Tomas Bjerre 127 Nov 23, 2022
Java bytecode static analyzer

This project is abandoned and unlikely will be supported in future HuntBugs 0.0.11 New Java bytecode static analyzer tool based on Procyon Compiler To

Tagir Valeev 302 Aug 13, 2022
Catch common Java mistakes as compile-time errors

Error Prone Error Prone is a static analysis tool for Java that catches common programming mistakes at compile-time. public class ShortSet { public

Google 6.3k Dec 31, 2022
RestAhead - compile time generated REST client

RestAhead - compile time generated REST client This project draws inspiration from projects such as Retrofit and Feign, but with a twist: your service

Žan Skamljič 13 Dec 24, 2022
Java upgrade example errors and solutions

Java upgrade example errors and solutions This project shows the errors encountered during a Java upgrade and the necessary fixes. Per Java version th

Johan Janssen 241 Dec 31, 2022
Criando Catch The Crab em JAVA

?? Catch The Crab •Completo• Linguagem utilizada: JAVA Catch The Crab Neste joga terá caranguejos spawnando aleatoriamente você terá que destrui-lo an

lailaz 3 Feb 21, 2022
Efficient yet Effective plugin to catch X-rayers.

XCatch Efficient yet effective plugin to catch X-rayers for Minecraft 1.13-1.18. XCatch analizes how a player is mining by looking it how many turns i

null 7 Nov 10, 2022
Time-Based One-Time Password (RFC 6238) and HMAC-Based One-Time Password (RFC 4226) reference implementations and more.

Crypto Time-Based One-Time Password (RFC 6238) and HMAC-Based One-Time Password (RFC 4226) reference implementations and more. Getting Started TOTP ge

Oliver Yasuna 1 May 12, 2022
Compile Java byte-code to native CPU's.

Java Grinder Compile Java bytecode to microcontroller assembly. Currently supporting MSP430, dsPIC, 6502/6510, 68000, MIPS, TMS9900, and Z80 with plat

Michael Kohn 396 Dec 23, 2022
A library for IDEs and Code Editors to compile java projects faster dynamically

A library for IDEs and Code Editors to compile java projects faster dynamically

omega ui 2 Feb 22, 2022
Download compiled jar from packages or compile it by yourself from sources

idle_codes Install Download compiled jar from packages or compile it by yourself from sources Put the jar file wherever you want. Make sure you have J

null 8 Dec 31, 2021