JDK-8144580 : java.lang.AssertionError: Missing type variable in where clause: T
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 8
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: windows_7
  • CPU: x86_64
  • Submitted: 2015-09-16
  • Updated: 2025-11-20
  • Resolved: 2016-01-19
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9 b103Fixed
Related Reports
Relates :  
Description
FULL PRODUCT VERSION :
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]

A DESCRIPTION OF THE PROBLEM :
I get the following error when compiling my code (see below).

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile the code below.


ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.8.0_60)...
java.lang.AssertionError: annotation tree hasn't been attributed yet: @NonNull()
at com.sun.tools.javac.util.Assert.error(Assert.java:133)
at com.sun.tools.javac.util.Assert.checkNonNull(Assert.java:118)
at com.sun.tools.javac.comp.Check.validateTypeAnnotation(Check.java:2745)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitAnnotation(Attr.java:4461)
at com.sun.tools.javac.tree.JCTree$JCAnnotation.accept(JCTree.java:2317)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
at com.sun.tools.javac.tree.TreeScanner.visitAnnotatedType(TreeScanner.java:324)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitAnnotatedType(Attr.java:4466)
at com.sun.tools.javac.tree.JCTree$JCAnnotatedType.accept(JCTree.java:2373)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
at com.sun.tools.javac.tree.TreeScanner.visitTypeApply(TreeScanner.java:287)
at com.sun.tools.javac.tree.JCTree$JCTypeApply.accept(JCTree.java:2135)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.tree.TreeScanner.visitTypeCast(TreeScanner.java:249)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitTypeCast(Attr.java:4510)
at com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1814)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
at com.sun.tools.javac.tree.TreeScanner.visitNewClass(TreeScanner.java:207)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitNewClass(Attr.java:4529)
at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1516)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitVarDef(Attr.java:4504)
at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:852)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitBlock(Attr.java:4557)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitMethodDef(Attr.java:4495)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitClassDef(Attr.java:4552)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
at com.sun.tools.javac.comp.Attr.validateTypeAnnotations(Attr.java:4450)
at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4374)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4249)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4178)
at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4153)
at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1248)
at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
at com.sun.tools.javac.main.Main.compile(Main.java:523)
at com.sun.tools.javac.main.Main.compile(Main.java:381)
at com.sun.tools.javac.main.Main.compile(Main.java:370)
at com.sun.tools.javac.main.Main.compile(Main.java:361)
at com.sun.tools.javac.Main.compile(Main.java:56)

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
public static <T> void test() {
  final Collection<@NonNull T> c = new LinkedList<>();
  final List<@NonNull String> l = new LinkedList<@NonNull String>((Collection<@NonNull String>) c) {
    // empty
  };
}
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Cast only to (Collection).


Comments
URL: http://hg.openjdk.java.net/jdk9/jdk9/langtools/rev/1fd828240c4d User: lana Date: 2016-01-27 21:41:47 +0000
27-01-2016

URL: http://hg.openjdk.java.net/jdk9/dev/langtools/rev/1fd828240c4d User: sadayapalam Date: 2016-01-19 10:25:03 +0000
19-01-2016

I am puzzled as to why we would test and report status against b94 instead of the most recent build. On tip with -Xlint specified, I see the following crash: java.lang.AssertionError: Missing type variable in where clause T at com.sun.tools.javac.util.RichDiagnosticFormatter.unique(RichDiagnosticFormatter.java:247) at com.sun.tools.javac.util.RichDiagnosticFormatter.access$100(RichDiagnosticFormatter.java:71) at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitTypeVar(RichDiagnosticFormatter.java:398) at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitTypeVar(RichDiagnosticFormatter.java:340) at com.sun.tools.javac.code.Type$TypeVar.accept(Type.java:1614) at com.sun.tools.javac.code.Printer.visit(Printer.java:136) at com.sun.tools.javac.code.Printer.visitTypes(Printer.java:108) at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:435) at com.sun.tools.javac.util.RichDiagnosticFormatter$RichPrinter.visitMethodSymbol(RichDiagnosticFormatter.java:340) at com.sun.tools.javac.code.Symbol$MethodSymbol.accept(Symbol.java:1770) at com.sun.tools.javac.code.Printer.visit(Printer.java:147) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArgument(AbstractDiagnosticFormatter.java:199) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatArguments(AbstractDiagnosticFormatter.java:164) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:111) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:67) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatSubdiagnostic(AbstractDiagnosticFormatter.java:288) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.formatSubdiagnostics(AbstractDiagnosticFormatter.java:265) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMessage(BasicDiagnosticFormatter.java:128) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatMeta(BasicDiagnosticFormatter.java:186) at com.sun.tools.javac.util.BasicDiagnosticFormatter.formatDiagnostic(BasicDiagnosticFormatter.java:100) at com.sun.tools.javac.util.AbstractDiagnosticFormatter.format(AbstractDiagnosticFormatter.java:120) at com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:122) at com.sun.tools.javac.util.RichDiagnosticFormatter.format(RichDiagnosticFormatter.java:71) at com.sun.tools.javac.util.Log.writeDiagnostic(Log.java:611) at com.sun.tools.javac.util.Log$DefaultDiagnosticHandler.report(Log.java:579) at com.sun.tools.javac.util.Log.report(Log.java:550) at com.sun.tools.javac.util.AbstractLog.mandatoryWarning(AbstractLog.java:318) at com.sun.tools.javac.util.AbstractLog.mandatoryWarning(AbstractLog.java:309) at com.sun.tools.javac.util.MandatoryWarningHandler.logMandatoryWarning(MandatoryWarningHandler.java:255) at com.sun.tools.javac.util.MandatoryWarningHandler.report(MandatoryWarningHandler.java:133) at com.sun.tools.javac.comp.Check.warnUnchecked(Check.java:240) at com.sun.tools.javac.comp.Check$ConversionWarner.warn(Check.java:3543) at com.sun.tools.javac.code.Types$7.visitClassType(Types.java:1564) at com.sun.tools.javac.code.Types$7.visitClassType(Types.java:1472) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:999) at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4533) at com.sun.tools.javac.code.Types.isCastable(Types.java:1463) at com.sun.tools.javac.comp.Check.checkCastable(Check.java:583) at com.sun.tools.javac.comp.Check.checkCastable(Check.java:580) at com.sun.tools.javac.comp.Attr.visitTypeCast(Attr.java:3223) at com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1977) at com.sun.tools.javac.comp.ArgumentAttr.visitTree(ArgumentAttr.java:202) at com.sun.tools.javac.tree.JCTree$Visitor.visitTypeCast(JCTree.java:2775) at com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1977) at com.sun.tools.javac.comp.ArgumentAttr.attribArg(ArgumentAttr.java:192) at com.sun.tools.javac.comp.Attr$MethodAttrInfo.attr(Attr.java:541) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:631) at com.sun.tools.javac.comp.Attr.attribArgs(Attr.java:727) at com.sun.tools.javac.comp.Attr.visitNewClass(Attr.java:2058) at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1653) at com.sun.tools.javac.comp.Attr$ResultInfo.attr(Attr.java:493) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:631) at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:670) at com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:1124) at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:920) at com.sun.tools.javac.comp.Attr$ResultInfo.attr(Attr.java:493) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:631) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:700) at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:719) at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1172) at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:984) at com.sun.tools.javac.comp.Attr$ResultInfo.attr(Attr.java:493) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:631) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:700) at com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1063) at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:836) at com.sun.tools.javac.comp.Attr$ResultInfo.attr(Attr.java:493) at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:631) at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:700) at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4438) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4345) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4274) at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4249) at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1232) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:871) at com.sun.tools.javac.main.Main.compile(Main.java:257) at com.sun.tools.javac.main.Main.compile(Main.java:142) at com.sun.tools.javac.Main.compile(Main.java:55) at com.sun.tools.javac.Main.main(Main.java:41)
19-01-2016

Since it is not reproducing with JDK 9 build, closing this issue as Closed/Not an issue.
17-01-2016

Test Result: *************** OS: Windows 7 - 64 bit JDK: ****** 8fcs b132 : Fail 8u51 b16 : Fail 8u65 b17 : Fail 8u72 ea b05 : Fail 9-ea b94 : Pass ---------------------------------- 9-ea b94 : Fail [with -Xlint] O/P: ****** c:\Abhijit\tools>javac Test.java An exception has occurred in the compiler (1.8.0). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program a java.lang.AssertionError: annotation tree hasn't been attributed yet: @NonNull() at com.sun.tools.javac.util.Assert.error(Assert.java:133) at com.sun.tools.javac.util.Assert.checkNonNull(Assert.java:118) at com.sun.tools.javac.comp.Check.validateTypeAnnotation(Check.java:2743) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitAnnotation(Attr.java:4425) at com.sun.tools.javac.tree.JCTree$JCAnnotation.accept(JCTree.java:2311) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57) at com.sun.tools.javac.tree.TreeScanner.visitAnnotatedType(TreeScanner.java:324) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitAnnotatedType(Attr.java:4430) at com.sun.tools.javac.tree.JCTree$JCAnnotatedType.accept(JCTree.java:2367) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57) at com.sun.tools.javac.tree.TreeScanner.visitTypeApply(TreeScanner.java:287) at com.sun.tools.javac.tree.JCTree$JCTypeApply.accept(JCTree.java:2129) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.tree.TreeScanner.visitTypeCast(TreeScanner.java:249) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitTypeCast(Attr.java:4474) at com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1808) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57) at com.sun.tools.javac.tree.TreeScanner.visitNewClass(TreeScanner.java:207) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitNewClass(Attr.java:4492) at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1510) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitVarDef(Attr.java:4468) at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:846) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitBlock(Attr.java:4520) at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:903) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitMethodDef(Attr.java:4459) at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:772) at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49) at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitClassDef(Attr.java:4515) at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:687) at com.sun.tools.javac.comp.Attr.validateTypeAnnotations(Attr.java:4414) at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4338) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4215) at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4149) at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4124) at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1251) at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:904) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:863) at com.sun.tools.javac.main.Main.compile(Main.java:523) at com.sun.tools.javac.main.Main.compile(Main.java:381) at com.sun.tools.javac.main.Main.compile(Main.java:370) at com.sun.tools.javac.main.Main.compile(Main.java:361) at com.sun.tools.javac.Main.compile(Main.java:56) at com.sun.tools.javac.Main.main(Main.java:42) c:\Abhijit\tools> 9-ea b94: ######## c:\Abhijit\tools>javac Test.java Note: Test.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. c:\Abhijit\tools>
03-12-2015

A complete test case is required to reproduce the issue.
03-12-2015