Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FallThrough - IndexOutOfBoundsException #858

Closed
tschwery opened this issue Dec 12, 2017 · 3 comments
Closed

FallThrough - IndexOutOfBoundsException #858

tschwery opened this issue Dec 12, 2017 · 3 comments

Comments

@tschwery
Copy link

error-prone version: 2.1.4-SNAPSHOT
[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.FallThrough.matchSwitch(FallThrough.java:70)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitSwitch(ErrorProneScanner.java:1027)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitSwitch(ErrorProneScanner.java:145)
[ERROR]   	at com.sun.tools.javac.tree.JCTree$JCSwitch.accept(JCTree.java:1223)
[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:527)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
[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.visitIf(TreeScanner.java:419)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:755)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitIf(ErrorProneScanner.java:145)
[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:527)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
[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.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:527)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
[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.visitForLoop(TreeScanner.java:291)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitForLoop(ErrorProneScanner.java:725)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitForLoop(ErrorProneScanner.java:145)
[ERROR]   	at com.sun.tools.javac.tree.JCTree$JCForLoop.accept(JCTree.java:1132)
[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:527)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
[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:895)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:145)
[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:587)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:145)
[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.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.visitCompilationUnit(TreeScanner.java:144)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:602)
[ERROR]   	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:145)
[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:152)
[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.GeneratedMethodAccessor49.invoke(Unknown Source)
[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:886)
[ERROR]   	at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
[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)

I was unable to find a test case to reproduce the error.

I added some logging to know what the positions and the code causing the error was

  • caseEndPosition(state, caseTree) is 33079
  • next.getStartPosition() is 32872

Source code around these positions is :

{{N}}switch (dir) {
    case HORIZONTAL_TOP:
        ws.addWaypoint(0, dy);
        ws.setArrowType(WorkflowSuccession.ArrowType.XY);
        break;{{E}}
    case HORIZONTAL_BOTTOM:
        ws.addWaypoint(0, dy);

{{E}} is the position returned by caseEndPosition(state, caseTree) and {{N}} is next.getStartPosition(). dir is an enum with four possible values.

If I dump the caseTree in caseEndPosition (on line 119), I get:

case 1: 
    ws.addWaypoint(0, dy);
    ws.setArrowType(WorkflowSuccession$ArrowType.XY);
    break;

We are not using Lombok in the project but perhaps other dependencies could cause such errors ?

@cushon
Copy link
Collaborator

cushon commented Dec 17, 2017

Can you check whether passing -XDcompilePolicy=simple to javac makes a difference?

@tschwery
Copy link
Author

With -XDcompilePolicy=simple, there is no crash, no error.

@cushon
Copy link
Collaborator

cushon commented Dec 18, 2017

Thanks for checking. That indicates this issue is a duplicate of #781. We're looking in to a more permanent fix, but for now passing the flag is the recommended work-around.

@cushon cushon closed this as completed Dec 18, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants