NPE by Constructor Reference for enum

bitter_fox bitterfoxc at gmail.com
Fri Jun 8 06:24:03 PDT 2012


I've just got the fix.

Thank you,
bitter_fox

2012/6/8 Maurizio Cimadamore <maurizio.cimadamore at oracle.com>

> Good catch - the type of a constructor reference must denote a
> (non-abstract) class type.
>
> Maurizio
>
>
> On 08/06/12 01:14, bitter_fox wrote:
>
>> Hi,
>> The compiler(Revision of langtools is 1422) throws NPE by Constructor
>> Reference for enum:
>>
>> public class Main
>> {
>>     interface SAM0<R>
>>     {
>>         R invoke();
>>     }
>>
>>     enum E
>>     {
>>         A;
>>
>>         private SAM0<E>  sam = E::new; // NPE
>>
>>         E() {}
>>
>>         private void m()
>>         {
>>             //new E(); // compile time error
>>         }
>>     }
>> }
>>
>> I think E::new would be compile time error like new E().
>>
>> Here is the StackTrace:
>>
>> java.lang.NullPointerException
>>         at com.sun.tools.javac.util.**ListBuffer.append(ListBuffer.**
>> java:129)
>>         at com.sun.tools.javac.comp.**Lower.boxArgs(Lower.java:2898)
>>         at com.sun.tools.javac.comp.**Lower.visitNewClass(Lower.**
>> java:2688)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCNewClass.accept(**JCTree.java:1444)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2212)
>>         at com.sun.tools.javac.comp.**Lower.visitReturn(Lower.java:**
>> 3385)
>>         at com.sun.tools.javac.tree.**JCTree$JCReturn.accept(JCTree.**
>> java:1312)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :70)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.visitBlock(**TreeTranslator.jav
>> a:160)
>>         at com.sun.tools.javac.comp.**Lower.visitBlock(Lower.java:**3358)
>>         at com.sun.tools.javac.tree.**JCTree$JCBlock.accept(JCTree.**
>> java:837)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.visitMethodDef(**TreeTranslator
>> .java:144)
>>         at
>> com.sun.tools.javac.comp.**Lower.visitMethodDefInternal(**Lower.java:2667
>> )
>>         at com.sun.tools.javac.comp.**Lower.visitMethodDef(Lower.**
>> java:2586)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCMethodDecl.accept(**JCTree.java:721)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.visitClassDef(Lower.**
>> java:2331)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCClassDecl.accept(**JCTree.java:643)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.visitNewClass(Lower.**
>> java:2726)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCNewClass.accept(**JCTree.java:1444)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2212)
>>         at com.sun.tools.javac.comp.**Lower.visitVarDef(Lower.java:**
>> 3344)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCVariableDecl.accept(**JCTree.java:781
>> )
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.visitClassDef(Lower.**
>> java:2331)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCClassDecl.accept(**JCTree.java:643)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.visitClassDef(Lower.**
>> java:2331)
>>         at
>> com.sun.tools.javac.tree.**JCTree$JCClassDecl.accept(**JCTree.java:643)
>>         at
>> com.sun.tools.javac.tree.**TreeTranslator.translate(**TreeTranslator.java
>> :58)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2201)
>>         at com.sun.tools.javac.comp.**Lower.translate(Lower.java:**2220)
>>         at
>> com.sun.tools.javac.comp.**Lower.translateTopLevelClass(**Lower.java:3709
>> )
>>         at
>> com.sun.tools.javac.main.**JavaCompiler.desugar(**JavaCompiler.java:1418)
>>
>>         at
>> com.sun.tools.javac.main.**JavaCompiler.desugar(**JavaCompiler.java:1295)
>>
>>         at
>> com.sun.tools.javac.main.**JavaCompiler.compile2(**JavaCompiler.java:892)
>>
>>         at
>> com.sun.tools.javac.main.**JavaCompiler.compile(**JavaCompiler.java:851)
>>         at com.sun.tools.javac.main.Main.**compile(Main.java:441)
>>         at com.sun.tools.javac.main.Main.**compile(Main.java:358)
>>         at com.sun.tools.javac.main.Main.**compile(Main.java:347)
>>         at com.sun.tools.javac.main.Main.**compile(Main.java:338)
>>         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