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

bitter_fox bitterfoxc at gmail.com
Tue Mar 20 18:03:51 PDT 2012


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