"(Lambda Expression)#method" or "(Method or Constructor Reference)#method" causes javac to throw NullPointerException

bitter_fox bitterfoxc at gmail.com
Thu Jan 26 05:01:51 PST 2012


Hi.

"(Lambda Expression)#method" or "(Method or Constructor Reference)#method"
causes javac to throw NullPointerException.(Revision of langtool is 1246.)

For example,

public class Main
{
    interface SAM
    {
        void invoke();
    }

    public static void main(String[] args)
    {
        SAM sam = ((SAM)() -> {})#invoke;
    }
}

This is the StackTrace:
java.lang.NullPointerException
        at
com.sun.tools.javac.comp.LambdaToInnerClass.visitLambda(LambdaToInnerClass.java:90)
        at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1495)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitTypeCast(TreeTranslator.java:328)
        at
com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1690)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitParens(TreeTranslator.java:299)
        at com.sun.tools.javac.tree.JCTree$JCParens.accept(JCTree.java:1537)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at
com.sun.tools.javac.tree.TreeTranslator.visitNewClass(TreeTranslator.java:280)
        at
com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1399)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaToInnerClass.visitReference(LambdaToInnerClass.java:280)
        at
com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:1844)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:151)
        at
com.sun.tools.javac.comp.LambdaTranslator.visitVarDef(LambdaTranslator.java:213)
        at
com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:736)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at
com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:792)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
        at
com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:676)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        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.LambdaTranslator.visitClassDef(LambdaTranslator.java:139)
        at
com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:598)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.comp.LambdaTranslator.translateTopLevelClass(LambdaTranslator.java:126)
        at
com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1392)
        at
com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1286)
        at
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:885)
        at
com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:844)
        at com.sun.tools.javac.main.Main.compile(Main.java:430)
        at com.sun.tools.javac.main.Main.compile(Main.java:344)
        at com.sun.tools.javac.main.Main.compile(Main.java:335)
        at com.sun.tools.javac.Main.compile(Main.java:76)
        at com.sun.tools.javac.Main.main(Main.java:61)

Method or Constructor Reference has a problem like this.

For example,

    SAM println = ((SAM)System.out#println)#invoke;

StackTrace:
java.lang.NullPointerException
        at
com.sun.tools.javac.comp.LambdaToInnerClass.visitReference(LambdaToInnerClass.java:180)
        at
com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:1844)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitTypeCast(TreeTranslator.java:328)
        at
com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1690)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitParens(TreeTranslator.java:299)
        at com.sun.tools.javac.tree.JCTree$JCParens.accept(JCTree.java:1537)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at
com.sun.tools.javac.tree.TreeTranslator.visitNewClass(TreeTranslator.java:280)
        at
com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1399)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaToInnerClass.visitReference(LambdaToInnerClass.java:280)
        at
com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:1844)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:151)
        at
com.sun.tools.javac.comp.LambdaTranslator.visitVarDef(LambdaTranslator.java:213)
        at
com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:736)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
        at
com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
        at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:792)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
        at
com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:676)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        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.LambdaTranslator.visitClassDef(LambdaTranslator.java:139)
        at
com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:598)
        at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:106)
        at
com.sun.tools.javac.comp.LambdaTranslator.translate(LambdaTranslator.java:99)
        at
com.sun.tools.javac.comp.LambdaTranslator.translateTopLevelClass(LambdaTranslator.java:126)
        at
com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1392)
        at
com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1286)
        at
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:885)
        at
com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:844)
        at com.sun.tools.javac.main.Main.compile(Main.java:430)
        at com.sun.tools.javac.main.Main.compile(Main.java:344)
        at com.sun.tools.javac.main.Main.compile(Main.java:335)
        at com.sun.tools.javac.Main.compile(Main.java:76)
        at com.sun.tools.javac.Main.main(Main.java:61)

Regards,
bitter_fox


More information about the lambda-dev mailing list