The compiler throws NPE by an incompatible OR-throws-type-parameter such as "<Exception | Error>".

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Wed Mar 21 02:48:56 PDT 2012


Thanks for the report

Maurizio

On 21/03/12 01:03, bitter_fox wrote:
> Hi,
> As the title, the compiler throws NPE when we compile the following program:
>
> public class Main<throws E>
> {
>      {
>          new Main<Exception | Error>(); // NPE
>
>          // FYI
>          // new Main<Error>(); // Compile-Time Error
>
>          // new Main<Exception | Object>(); // Compile-Time Error:
>          /*
>           * Main.java:11: error: incompatible types
>           *       new Main<Exception | Object>(); // Compile-Time Error:
>           *                            ^
>           *  required: Throwable [I think this would be "required:
> Exception".]
>           *  found:    Object
>           */
>      }
> }
>
> This is the StackTrace:
>
> java.lang.NullPointerException
>          at
> com.sun.tools.javac.comp.Check$Validator.visitTypeApply(Check.java:12
> 40)
>          at
> com.sun.tools.javac.tree.JCTree$JCTypeApply.accept(JCTree.java:2043)
>          at
> com.sun.tools.javac.comp.Check$Validator.validateTree(Check.java:1345
> )
>          at com.sun.tools.javac.comp.Check.validate(Check.java:1198)
>          at com.sun.tools.javac.comp.Check.validate(Check.java:1195)
>          at com.sun.tools.javac.comp.Attr.visitNewClass(Attr.java:1749)
>          at
> com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1399)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:468)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:486)
>          at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:2886)
>          at
> com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1773
> )
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:468)
>          at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1623)
>          at
> com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java
> :1348)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:468)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:486)
>          at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:501)
>          at com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1368)
>          at
> com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.j
> ava:1178)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:468)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:486)
>          at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:521)
>          at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:537)
>          at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:962)
>          at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:792)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:468)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:486)
>          at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:521)
>          at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:878)
>          at
> com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:676)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:468)
>          at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:486)
>          at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:521)
>          at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:3877)
>          at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3799)
>          at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3735)
>          at com.sun.tools.javac.comp.Attr.attrib(Attr.java:3709)
>          at
> com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:119
> 7)
>          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