Error-prone: HidingField: NoSuchMethodError: 'com.sun.tools.javac.util.List com.sun.tools.javac.code.Symbol$TypeSymbol.getEnclosedElements

Created on 12 Jan 2021  路  9Comments  路  Source: google/error-prone

Description of the problem:

After upgrading errorprone from 2.4.0 to 2.5.0 following is reported in [my project's] maven build (with JDK8, JDK11, JDK12 or JDK13):

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.5.0
     BugPattern: HidingField
     Stack Trace:
     java.lang.NoSuchMethodError: 'com.sun.tools.javac.util.List com.sun.tools.javac.code.Symbol$TypeSymbol.getEnclosedElements()'
    at com.google.errorprone.bugpatterns.HidingField.matchClass(HidingField.java:73)
    at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:450)
    at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:548)
    at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:151)
    at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
    at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
    at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
    at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
    at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
    at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
    at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
    at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:561)
    at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:151)
    at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
    at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
    at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
    at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
    at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
    at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1365)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:960)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1134)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:187)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
    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:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:193)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39)
    at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122)
    at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61)

The same code works fine with JDK14 and JDK15.

Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.

What version of Error Prone are you using?

2.5.0

Have you found anything relevant by searching the web?

1529

Most helpful comment

Thanks for the additional reports. https://github.com/google/error-prone/issues/2092#issuecomment-759474409 looks like a distinct issue with the same root cause.

I'm going to release a 2.5.1 built on JDK 8 that will resolve this issue.

All 9 comments

This release was built against a newer JDK and picked up this backwards-incompatible change: https://github.com/openjdk/jdk/commit/827e5e32264666639d36990edd5e7d0b7e7c78a9#diff-9b6c5d86aacec00206bfcdbfc12caa41fbb0812426c4f2fd290c3fb1873a532fR840

I can work around that specific example, but if there are a lot more examples of this we should go back to building the release against JDK 8.

Do you mind disabling that particular check with -Xep:HidingField:OFF as an experiment, to see if there are other crashes?

Our codebase appears to compile with that disabled

Our codebase appears to compile with that disabled

The same on my side - with -Xep:HidingField:OFF build completes with no other error.

This issue looks similar, even if the BugPattern is ComputeIfAbsentAmbiguousReference

[javac]      Please report this at https://github.com/google/error-prone/issues/new and include the following:
[javac]   
[javac]      error-prone version: 2.5.0
[javac]      BugPattern: ComputeIfAbsentAmbiguousReference
[javac]      Stack Trace:
[javac]      java.lang.NoSuchMethodError: com.sun.tools.javac.code.Symbol$ClassSymbol.getEnclosedElements()Lcom/sun/tools/javac/util/List;
[javac]     at com.google.errorprone.util.ASTHelpers.getConstructors(ASTHelpers.java:958)
[javac]     at com.google.errorprone.bugpatterns.ComputeIfAbsentAmbiguousReference.matchMethodInvocation(ComputeIfAbsentAmbiguousReference.java:75)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:450)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:747)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.visitMemberSelect(TreeScanner.java:680)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMemberSelect(ErrorProneScanner.java:729)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMemberSelect(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2112)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac]     at com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:508)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:752)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1644)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:433)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:634)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1454)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac]     at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac]     at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:521)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac]     at com.sun.source.util.TreeScanner.visitEnhancedForLoop(TreeScanner.java:306)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitEnhancedForLoop(ErrorProneScanner.java:621)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitEnhancedForLoop(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCEnhancedForLoop.accept(JCTree.java:1166)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac]     at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac]     at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:521)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac]     at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:741)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac]     at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[javac]     at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:549)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac]     at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac]     at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[javac]     at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:561)
[javac]     at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:151)
[javac]     at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
[javac]     at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
[javac]     at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
[javac]     at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
[javac]     at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
[javac]     at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
[javac]     at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
[javac]     at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
[javac]     at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
[javac]     at com.sun.tools.javac.main.Main.compile(Main.java:302)
[javac]     at com.sun.tools.javac.main.Main.compile(Main.java:162)
[javac]     at com.sun.tools.javac.Main.compile(Main.java:57)
[javac]     at com.sun.tools.javac.Main.main(Main.java:43)
[javac] 1 error

Same error here. Using JDK 8.

Thanks for the additional reports. https://github.com/google/error-prone/issues/2092#issuecomment-759474409 looks like a distinct issue with the same root cause.

I'm going to release a 2.5.1 built on JDK 8 that will resolve this issue.

Fwiw, the release notes mention JDK 8, but it's also an issue with JDK 11 (or apparently any version before JDK 15 according to the JDK commit you linked to).

That said, thanks for the fix and the release!

@tbroyer I updated the relnotes, thanks for the correction!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

vorburger picture vorburger  路  4Comments

markelliot picture markelliot  路  6Comments

edwardcarlfox picture edwardcarlfox  路  5Comments

cushon picture cushon  路  7Comments

cojoco picture cojoco  路  3Comments