Exceptions at Constructor References for inner classes

maurizio cimadamore maurizio.cimadamore at oracle.com
Sat Jun 2 11:34:36 PDT 2012


Thanks - I will dig deeper and find what the problem is - I assume this 
is with the latest compiler right (i.e. not lambda binary snapshot) ?

Maurizio

On 02-Jun-12 4:14 PM, bitter_fox wrote:
> Hi,
> I found two cases which cause of Exceptions at Constructor References for
> inner classes:
>
> public class Main
> {
>      public interface SAM0<R>
>      {
>          R invoke();
>      }
>
>      public interface SAM1<R, A>
>      {
>          R invoke(A a);
>      }
>
>      static
>      {
>          SAM1<Sub.Inner, Sub>  sam = Sub.Inner::new; // NPE
>      }
> }
>
> public class Sub
> {
>      public class Inner {}
>
>      static
>      {
>          Main.SAM1<Inner, Sub>  sam = Inner::new; // OK
>      }
>
>      {
>          Main.SAM0<Inner>  sam0 = Inner::new; // OK
>          Main.SAM1<Inner, Sub>  sam1 = Inner::new; //
> InapplicableMethodException
>      }
> }
>
> These are stack traces:
>
> java.lang.NullPointerException
>          at
> com.sun.tools.javac.comp.Resolve.hasEnclosingInstance(Resolve.java:25
> 17)
>          at
> com.sun.tools.javac.comp.Resolve.resolveMemberReference(Resolve.java:
> 2236)
>          at com.sun.tools.javac.comp.Attr.visitReference(Attr.java:2631)
>          at
> com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:
> 1880)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:552)
>          at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:568)
>          at com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:1003)
>          at
> com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:781
> )
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:552)
>          at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:595)
>          at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:611)
>          at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1029)
>          at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:837)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:552)
>          at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:595)
>          at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3739)
>          at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3658)
>          at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3592)
>          at com.sun.tools.javac.comp.Attr.attrib(Attr.java:3566)
>          at
> com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:120
> 6)
>          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)
>
> com.sun.tools.javac.comp.Resolve$InapplicableMethodException
>          at com.sun.tools.javac.comp.Resolve.<init>(Resolve.java:131)
>          at com.sun.tools.javac.comp.Resolve.instance(Resolve.java:146)
>          at com.sun.tools.javac.comp.Check.<init>(Check.java:100)
>          at com.sun.tools.javac.comp.Check.instance(Check.java:91)
>          at com.sun.tools.javac.code.Types.<init>(Types.java:104)
>          at com.sun.tools.javac.code.Types.instance(Types.java:90)
>          at com.sun.tools.javac.jvm.ClassReader.<init>(ClassReader.java:267)
>          at
> com.sun.tools.javac.jvm.ClassReader.instance(ClassReader.java:229)
>          at
> com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:341)
>          at
> com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:90)
>          at com.sun.tools.javac.main.Main.compile(Main.java:428)
>          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