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

ErrorProne crashes with ClassCastException on JDK 14 #1982

Closed
mdindoffer opened this issue Dec 3, 2020 · 0 comments · Fixed by #1988
Closed

ErrorProne crashes with ClassCastException on JDK 14 #1982

mdindoffer opened this issue Dec 3, 2020 · 0 comments · Fixed by #1988

Comments

@mdindoffer
Copy link

Description of the problem / feature request:

ErrorProne crashes with ClassCastException on JDK 14. Seems a switch case with a ternary operator causes problems.

Stacktrace
error-prone version: 2.4.0
   BugPattern: NullTernary
   Stack Trace:
   java.lang.ClassCastException: class com.sun.tools.javac.tree.JCTree$JCSwitchExpression cannot be cast to class com.sun.source.tree.SwitchTree (com.sun.tools.javac.tree.JCTree$JCSwitchExpression and com.sun.source.tree.SwitchTree are in module jdk.compiler of loader 'app')
	at com.google.errorprone.util.ASTHelpers$TargetTypeVisitor.visitCase(ASTHelpers.java:1509)
	at com.google.errorprone.util.ASTHelpers$TargetTypeVisitor.visitCase(ASTHelpers.java:1467)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCase.accept(JCTree.java:1298)
	at jdk.compiler/com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:80)
	at com.google.errorprone.util.ASTHelpers.targetType(ASTHelpers.java:1426)
	at com.google.errorprone.bugpatterns.NullTernary.matchConditionalExpression(NullTernary.java:46)
	at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:451)
	at com.google.errorprone.scanner.ErrorProneScanner.visitConditionalExpression(ErrorProneScanner.java:580)
	at com.google.errorprone.scanner.ErrorProneScanner.visitConditionalExpression(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCConditional.accept(JCTree.java:1468)
	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.scanAndReduce(TreeScanner.java:90)
	at jdk.compiler/com.sun.source.util.TreeScanner.visitCase(TreeScanner.java:361)
	at com.google.errorprone.scanner.ErrorProneScanner.visitCase(ErrorProneScanner.java:536)
	at com.google.errorprone.scanner.ErrorProneScanner.visitCase(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCase.accept(JCTree.java:1298)
	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.scanAndReduce(TreeScanner.java:90)
	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.visitSwitchExpression(TreeScanner.java:346)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCSwitchExpression.accept(JCTree.java:1329)
	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.scanAndReduce(TreeScanner.java:90)
	at jdk.compiler/com.sun.source.util.TreeScanner.visitLambdaExpression(TreeScanner.java:576)
	at com.google.errorprone.scanner.ErrorProneScanner.visitLambdaExpression(ErrorProneScanner.java:704)
	at com.google.errorprone.scanner.ErrorProneScanner.visitLambdaExpression(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1917)
	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.visitMethodInvocation(TreeScanner.java:526)
	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:753)
	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1752)
	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.visitExpressionStatement(TreeScanner.java:450)
	at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:635)
	at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1531)
	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.scanAndReduce(TreeScanner.java:90)
	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
	at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:522)
	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1050)
	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.scanAndReduce(TreeScanner.java:90)
	at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:742)
	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:916)
	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.scanAndReduce(TreeScanner.java:90)
	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.visitClass(TreeScanner.java:187)
	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:550)
	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:823)
	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:562)
	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:152)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:603)
	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:1423)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1370)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:959)
	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.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:231)
	at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:498)
	at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:350)
	at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:274)
	at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:228)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1441)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1100)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1224)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1066)
	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:832)
	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:419)
	at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183)
	at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:132)
	at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:302)
	at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:132)
	at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:219)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at java.base/java.lang.Thread.run(Thread.java:832)

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

static String doStuff(SomeEnum enumVar) {
	return switch (enumVar) {
		case A -> enumVar.name() != null ? "AAA" : null;
		default -> null;
	};
}

static enum SomeEnum {
	A, B
}

What version of Error Prone are you using?

2.4.0

copybara-service bot pushed a commit that referenced this issue Dec 8, 2020
Fixes #1982

PiperOrigin-RevId: 346000494
stevie400 pushed a commit to HubSpot/error-prone that referenced this issue Jan 15, 2021
Fixes google#1982

PiperOrigin-RevId: 346393062
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

Successfully merging a pull request may close this issue.

1 participant