error-prone: 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
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 29
- Comments: 24 (4 by maintainers)
Commits related to this issue
- Re-Introduce errorprone (#3306) Now working with lombok, still requires a workaround though :( See https://github.com/google/error-prone/issues/780 for more info — committed to triplea-game/triplea by RoiEXLab 6 years ago
- fix(build): disable errorprone name check Our use of Lombok and Errorprone leads to an error[1] when compiling connectors, as a workaround this disables the name check until this is resolved in Error... — committed to chirino/syndesis by zregvart 6 years ago
@epmjohnston When are you planning to push the next release?
Thanks, do you know when can we expect it to be in maven ?
I believe this will be fixed when #1159 lands (which contains #1135)
I use the latest version 2.3.4 and still get this error when a class uses the @Slf4j annotation of lombok:
So either this issue is not fixed or #1034 nor #905 are duplicates.
Bump
I’m using 2.3.2 and I’m having the same issue, this bug was reported in 2017 and it still an issue?:
@anataliocs If you’re using
-Xplugin:ErrorProne(as now recommended), then the-Xep:ParameterName:OFFneeds to be in the very same argument, separated by spaces.When I try the workaround mentioned above I get the following error:
@tbroyer I was able to resolve the issue adding the arg to
errorproneArgsin my gradle script block for the gradle errorprone plugin. Thanks though!Thanks for the link @msridhar
@cushon any idea on when the next release will be?
For version 2.3.2. This issue still exists. I applied suggested workaround as a maven compiler parameter.
Just wanted to cross-reference this issue as well, related to the latest IntelliJ IDEA 2018 EAP builds: https://youtrack.jetbrains.com/issue/IDEA-186848