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

IndexOutOfBoundsException #143

Closed
ctcpip opened this issue Mar 28, 2018 · 7 comments
Closed

IndexOutOfBoundsException #143

ctcpip opened this issue Mar 28, 2018 · 7 comments
Assignees

Comments

@ctcpip
Copy link

ctcpip commented Mar 28, 2018

EP version 2.2.0
NullAway version 0.4.1

What did you do?

mvn clean compile

An unhandled exception was thrown by the Error Prone static analysis plugin.
     Please report this at https://github.com/google/error-prone/issues/new and include the following:
  
     error-prone version: 2.2.0
     Stack Trace:
     com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2218)
  	at com.google.common.cache.LocalCache.get(LocalCache.java:4147)
  	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4151)
  	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5140)
  	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5146)
  	at com.uber.nullaway.dataflow.DataFlow.dataflow(DataFlow.java:126)
  	at com.uber.nullaway.dataflow.DataFlow.resultForExpr(DataFlow.java:221)
  	at com.uber.nullaway.dataflow.DataFlow.expressionDataflow(DataFlow.java:159)
  	at com.uber.nullaway.dataflow.AccessPathNullnessAnalysis.getNullness(AccessPathNullnessAnalysis.java:92)
  	at com.uber.nullaway.NullAway.nullnessFromDataflow(NullAway.java:1680)
  	at com.uber.nullaway.NullAway.mayBeNullExpr(NullAway.java:1650)
  	at com.uber.nullaway.NullAway.matchDereference(NullAway.java:1728)
  	at com.uber.nullaway.NullAway.matchMemberSelect(NullAway.java:390)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMemberSelect(ErrorProneScanner.java:869)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMemberSelect(ErrorProneScanner.java:145)
  	at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2112)
  	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.visitMethodInvocation(TreeScanner.java:508)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:910)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:145)
  	at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
  	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.visitExpressionStatement(TreeScanner.java:433)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:710)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:145)
  	at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1454)
  	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.visitBlock(TreeScanner.java:248)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:527)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:145)
  	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:895)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:145)
  	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:587)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:145)
  	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:602)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:145)
  	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:43)
  	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
  	at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
  	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
  	at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
  	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:952)
  	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 org.codehaus.plexus.compiler.javac.errorprone.JavacCompilerWithErrorProne$CompilerInvoker.compile(JavacCompilerWithErrorProne.java:223)
  	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:1075)
  	at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168)
  	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
  	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
  	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
  	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
  	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
  	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
  	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:307)
  	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
  	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
  	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
  	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
  	at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
  	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)
  Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
  	at com.sun.tools.javac.util.List.get(List.java:490)
  	at shadow.checkerframework.javacutil.trees.TreeBuilder.buildIteratorMethodAccess(TreeBuilder.java:107)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitEnhancedForLoop(CFGBuilder.java:3589)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitEnhancedForLoop(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCEnhancedForLoop.accept(JCTree.java:1166)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3303)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitIf(CFGBuilder.java:3978)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitIf(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1427)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3303)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitIf(CFGBuilder.java:3978)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitIf(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1427)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3303)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitWhileLoop(CFGBuilder.java:4856)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitWhileLoop(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCWhileLoop.accept(JCTree.java:1086)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3303)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:1489)
  	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
  	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.process(CFGBuilder.java:1607)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder.run(CFGBuilder.java:330)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder.build(CFGBuilder.java:267)
  	at com.uber.nullaway.dataflow.DataFlow$2.load(DataFlow.java:110)
  	at com.uber.nullaway.dataflow.DataFlow$2.load(DataFlow.java:87)
  	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3708)
  	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2416)
  	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2299)
  	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2212)
  	... 111 more
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
	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:307)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
	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)
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1161)
	at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
	... 20 more

@msridhar
Copy link
Collaborator

msridhar commented Mar 28, 2018 via email

@ctcpip
Copy link
Author

ctcpip commented Mar 28, 2018

it blows up on the 2nd line here:

    final LDAPSearchConstraints constraints = new LDAPSearchConstraints();
    constraints.setReferralFollowing(true);

the method is: https://www.novell.com/documentation/developer/jldap/jldapenu/api/com/novell/ldap/LDAPConstraints.html#setReferralFollowing(boolean)

@msridhar
Copy link
Collaborator

Is there an enhanced for loop somewhere in the method containing that setReferralFollowing call? If so can you give us an idea how it looks? This part of the crash stack indicates this is a problem with handling of an enhanced for loop:

  	at com.sun.tools.javac.util.List.get(List.java:490)
  	at shadow.checkerframework.javacutil.trees.TreeBuilder.buildIteratorMethodAccess(TreeBuilder.java:107)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitEnhancedForLoop(CFGBuilder.java:3589)
  	at shadow.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitEnhancedForLoop(CFGBuilder.java:1489)

@msridhar msridhar self-assigned this Mar 28, 2018
@ctcpip
Copy link
Author

ctcpip commented Mar 28, 2018

further up the call stack, there is the following loop:

for (int x = 3; x > 0; x--) {
   // code
}

@msridhar
Copy link
Collaborator

Repro'd as a Checker Framework issue, typetools/checker-framework#1920. @ctcpip do you have an Iterator type with no type parameter somewhere in your code? In any case, once we get a fix in Checker Framework we'll pull it in.

@msridhar
Copy link
Collaborator

This is now fixed in the Checker Framework, see typetools/checker-framework#1923. I think CF cuts releases at the beginning of the month, so I'll probably try to pull in the next release to get the fix rather than doing a one-off patch.

@ctcpip again, thanks for the reports!

@ctcpip
Copy link
Author

ctcpip commented Mar 29, 2018

@msridhar thanks for the fast response!

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