JDK-8024498 : ClassCastException from Symbol$ClassSymbol to Symbol$MethodSymbol
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 8
  • Priority: P3
  • Status: Resolved
  • Resolution: Cannot Reproduce
  • Submitted: 2013-09-10
  • Updated: 2014-07-24
  • Resolved: 2013-09-10
Related Reports
Relates :  
Description
Compiling the following program:

public class Tmp {
    void test() {
        new Object() {
	    Runnable r = ()->{};
	};

        class X {
	    Runnable r = ()->{};
	}
    }
}

Results in the following error on b105:

An exception has occurred in the compiler (1.8.0-ea). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
java.lang.ClassCastException: com.sun.tools.javac.code.Symbol$ClassSymbol cannot be cast to com.sun.tools.javac.code.Symbol$MethodSymbol
	at com.sun.tools.javac.comp.LambdaToMethod.visitLambda(LambdaToMethod.java:252)
	at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1619)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:153)
	at com.sun.tools.javac.comp.LambdaToMethod.visitVarDef(LambdaToMethod.java:441)
	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:846)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
	at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:223)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:687)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.visitNewClass(TreeTranslator.java:283)
	at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1510)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.visitExec(TreeTranslator.java:245)
	at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1290)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:903)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:145)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:772)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
	at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:223)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:687)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
	at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:203)
	at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1465)
	at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1350)
	at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:900)
	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:859)
	at com.sun.tools.javac.main.Main.compile(Main.java:523)
	at com.sun.tools.javac.main.Main.compile(Main.java:381)
	at com.sun.tools.javac.main.Main.compile(Main.java:370)
	at com.sun.tools.javac.main.Main.compile(Main.java:361)
	at com.sun.tools.javac.Main.compile(Main.java:64)
	at com.sun.tools.javac.Main.main(Main.java:50)

However, the compilation succeeds using b106.

----------

Originally reported by Zhong Yu on lambda-dev:

http://mail.openjdk.java.net/pipermail/lambda-dev/2013-September/010927.html

Comments
TCK tests added: lang/tests/lang/LMBD/lmbd05102m0 lang/tests/lang/LMBD/lmbd05102m1 lang/tests/lang/LMBD/lmbd05102m2 lang/tests/lang/LMBD/lmbd05102m3 lang/tests/lang/LMBD/lmbd05102m4
24-07-2014

lambda repo is not up to date anymore. The idea now is to detect what bits can still be necessary to move from lambda to tl and let lambda as a reference.
10-09-2013

Test program compiles in latest TL as of the time and date of this comment
10-09-2013

Compiles fine for me too on JDK8-b106. (Not sure about lambda builds. I'm not using them.) This might be a duplicate of JDK-8020715, but I didn't want to make that assumption myself.
10-09-2013

Compiles just fine for me with a fairly recent copy of TL
10-09-2013

How up to date is the lambda world w.r.t. jdk8?
10-09-2013

This seems very similar to JDK-8020715, which was closed as not reproducible. However, there's a note in that bug saying it was fixed by JDK-8023515. The latter was integrated in b106 so it might indeed be fixed. But I'm filing this anyway so that somebody who really knows what's going on can assess whether this is indeed a duplicate of JDK-8020715.
10-09-2013