FULL PRODUCT VERSION :
java version "1.6.0_10-rc"
Java(TM) SE Runtime Environment (build 1.6.0_10-rc-b28)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
Linux 2.6.22-14-generic i686 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
When trying to compile the two sample files attached to this case, javac crashes. The crash is probably caused while parsing the line "public T getObject()" in the class GraphNode<T> .
Please note that this problem only happens when the classes and interfaces are distributed over two source files (as seen in the Workarounds section)
This was tested with 1.6.0_03 (Windows + Linux) as well as with javac 1.6.0_10-rc (Windows)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create the two files from the sample source code attached to this case
2. javac *.java
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The two files are compiled properly although I'm not too sure about this. It might also be a case that should lead to a compiler error.
ACTUAL -
javac crashes
ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.6.0_10-rc). Please file a bug at th
e Java Developer Connection (http://java.sun.com/webapps/bugreport) after check
ing the Bug Parade for duplicates. Include your program and the following diagno
stic in your report. Thank you.
java.lang.AssertionError: isSubtype 15
at com.sun.tools.javac.code.Types$5.visitType(Types.java:347)
at com.sun.tools.javac.code.Types$5.visitType(Types.java:328)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitWildcardType(T
ypes.java:3163)
at com.sun.tools.javac.code.Type$WildcardType.accept(Type.java:416)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:31
61)
at com.sun.tools.javac.code.Types.isSubtype(Types.java:324)
at com.sun.tools.javac.code.Types.isSubtype(Types.java:308)
at com.sun.tools.javac.code.Types.isSubtypeUnchecked(Types.java:288)
at com.sun.tools.javac.code.Types.isConvertible(Types.java:257)
at com.sun.tools.javac.code.Types.isAssignable(Types.java:1476)
at com.sun.tools.javac.code.Types.covariantReturnType(Types.java:2677)
at com.sun.tools.javac.code.Types.returnTypeSubstitutable(Types.java:266
1)
at com.sun.tools.javac.comp.Check.checkOverride(Check.java:1120)
at com.sun.tools.javac.comp.Check.checkImplementations(Check.java:1540)
at com.sun.tools.javac.comp.Check.checkImplementations(Check.java:1515)
at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:2693)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2628)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2564)
at com.sun.tools.javac.comp.Attr.attribBounds(Attr.java:442)
at com.sun.tools.javac.comp.MemberEnter.finishClass(MemberEnter.java:409
)
at com.sun.tools.javac.comp.MemberEnter.finish(MemberEnter.java:1000)
at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:967)
at com.sun.tools.javac.code.Symbol.complete(Symbol.java:386)
at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:758)
at com.sun.tools.javac.comp.Enter.complete(Enter.java:451)
at com.sun.tools.javac.comp.Enter.main(Enter.java:429)
at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:81
9)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)
at com.sun.tools.javac.main.Main.compile(Main.java:353)
at com.sun.tools.javac.main.Main.compile(Main.java:279)
at com.sun.tools.javac.main.Main.compile(Main.java:270)
at com.sun.tools.javac.Main.compile(Main.java:69)
at com.sun.tools.javac.Main.main(Main.java:54)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
// File GraphNode.java
interface IObjectNode
{
Object getObject();
}
public class GraphNode<T> implements IObjectNode
{
// The important line is the following one
public T getObject()
{
return null;
}
}
// File UnusedObject.java
interface ISelectableNode
{
boolean isSelected();
}
public class UnusedObject<NodeType extends GraphNode<?> & ISelectableNode>
{
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
1. Use type "Object" instead of type "T" as the return method of getObject in class GraphNode<T>
OR
2. Change "class UnusedObject<NodeType extends GraphNode<?> & ISelectableNode>" to "class UnusedObject<NodeType extends GraphNode & ISelectableNode>"
OR
3. Move all interfaces and classes into the same file.
java version "1.6.0_10-rc"
Java(TM) SE Runtime Environment (build 1.6.0_10-rc-b28)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
Linux 2.6.22-14-generic i686 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
When trying to compile the two sample files attached to this case, javac crashes. The crash is probably caused while parsing the line "public T getObject()" in the class GraphNode<T> .
Please note that this problem only happens when the classes and interfaces are distributed over two source files (as seen in the Workarounds section)
This was tested with 1.6.0_03 (Windows + Linux) as well as with javac 1.6.0_10-rc (Windows)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create the two files from the sample source code attached to this case
2. javac *.java
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The two files are compiled properly although I'm not too sure about this. It might also be a case that should lead to a compiler error.
ACTUAL -
javac crashes
ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.6.0_10-rc). Please file a bug at th
e Java Developer Connection (http://java.sun.com/webapps/bugreport) after check
ing the Bug Parade for duplicates. Include your program and the following diagno
stic in your report. Thank you.
java.lang.AssertionError: isSubtype 15
at com.sun.tools.javac.code.Types$5.visitType(Types.java:347)
at com.sun.tools.javac.code.Types$5.visitType(Types.java:328)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visitWildcardType(T
ypes.java:3163)
at com.sun.tools.javac.code.Type$WildcardType.accept(Type.java:416)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:31
61)
at com.sun.tools.javac.code.Types.isSubtype(Types.java:324)
at com.sun.tools.javac.code.Types.isSubtype(Types.java:308)
at com.sun.tools.javac.code.Types.isSubtypeUnchecked(Types.java:288)
at com.sun.tools.javac.code.Types.isConvertible(Types.java:257)
at com.sun.tools.javac.code.Types.isAssignable(Types.java:1476)
at com.sun.tools.javac.code.Types.covariantReturnType(Types.java:2677)
at com.sun.tools.javac.code.Types.returnTypeSubstitutable(Types.java:266
1)
at com.sun.tools.javac.comp.Check.checkOverride(Check.java:1120)
at com.sun.tools.javac.comp.Check.checkImplementations(Check.java:1540)
at com.sun.tools.javac.comp.Check.checkImplementations(Check.java:1515)
at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:2693)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2628)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:2564)
at com.sun.tools.javac.comp.Attr.attribBounds(Attr.java:442)
at com.sun.tools.javac.comp.MemberEnter.finishClass(MemberEnter.java:409
)
at com.sun.tools.javac.comp.MemberEnter.finish(MemberEnter.java:1000)
at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:967)
at com.sun.tools.javac.code.Symbol.complete(Symbol.java:386)
at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:758)
at com.sun.tools.javac.comp.Enter.complete(Enter.java:451)
at com.sun.tools.javac.comp.Enter.main(Enter.java:429)
at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:81
9)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)
at com.sun.tools.javac.main.Main.compile(Main.java:353)
at com.sun.tools.javac.main.Main.compile(Main.java:279)
at com.sun.tools.javac.main.Main.compile(Main.java:270)
at com.sun.tools.javac.Main.compile(Main.java:69)
at com.sun.tools.javac.Main.main(Main.java:54)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
// File GraphNode.java
interface IObjectNode
{
Object getObject();
}
public class GraphNode<T> implements IObjectNode
{
// The important line is the following one
public T getObject()
{
return null;
}
}
// File UnusedObject.java
interface ISelectableNode
{
boolean isSelected();
}
public class UnusedObject<NodeType extends GraphNode<?> & ISelectableNode>
{
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
1. Use type "Object" instead of type "T" as the return method of getObject in class GraphNode<T>
OR
2. Change "class UnusedObject<NodeType extends GraphNode<?> & ISelectableNode>" to "class UnusedObject<NodeType extends GraphNode & ISelectableNode>"
OR
3. Move all interfaces and classes into the same file.
- duplicates
-
JDK-6687444 javac crashes with Wildcard Parameterized TypeBounds while checking for overriden methods
- Closed
- relates to
-
JDK-6718388 4.9: Specify subtyping of intersection types
- Open
-
JDK-6500207 REGRESSION: Compiler Crash with java.lang.AssertionError assertion
- Closed
-
JDK-7034495 Javac asserts on usage of wildcards in bounds
- Closed