当前位置: 代码迷 >> Web前端 >> JavaFX编译器编译满载方法的一处BUG
  详细解决方案

JavaFX编译器编译满载方法的一处BUG

热度:180   发布时间:2012-11-05 09:35:12.0
JavaFX编译器编译重载方法的一处BUG

直接看测试代码吧,一共2个类:BugTest.fx和A.fx,SDK版本是1.2.3。

/*
?*?BugTest.fx
?*
?*?Created?on?2010-2-25,?22:05:11
?
*/
package ?org.jqueen.fx.bug;

/**
?*?
@author ?Leon
?
*/
public ? class ?BugTest?{

// ?取消该方法注释编译将抛出异常
// ????function?test(a:?A):?Void?{
// ????????test(5);
// ????}

????function?test(s:?String):?Void?{
????????test(
5 );
????}

????function?test(i:?Integer):?Void?{
????}

}
/*
?*?A.fx
?*
?*?Created?on?2010-2-25,?22:10:45
?
*/

package ?org.jqueen.fx.bug;

/**
?*?
@author ?Leon
?
*/

public ?mixin? class ?A?{ }
BugTest里实现了3个带输入参数的重载方法,第一个方法的参数是自定义类型A,A被声明为mixin ,后2个的参数是原始类型。只有在第一个方法被注释的情况下该类才可以被编译通过,否则编译器会抛出异常:
An exception has occurred in the OpenJavafx compiler. Please file a bug at the Openjfx-compiler issues home (https://openjfx-compiler.dev.java.net/Issues) after checking for duplicates. Include the following diagnostic in your report and, if possible, the source code which triggered this problem. ?Thank you.
java.lang.ClassCastException: com.sun.tools.javac.code.Symbol$ClassSymbol
?? ? ? ?at com.sun.tools.javafx.code.JavafxTypes.asSuper(JavafxTypes.java:202)
?? ? ? ?at com.sun.tools.javac.code.Types.isSubtypeUnchecked(Types.java:305)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.argumentsAcceptable(JavafxResolve.java:421)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.rawInstantiate(JavafxResolve.java:387)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.selectBest(JavafxResolve.java:711)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findMemberWithoutAccessChecks(JavafxResolve.java:952)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findMember(JavafxResolve.java:906)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findMember(JavafxResolve.java:886)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findVar(JavafxResolve.java:567)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findIdent(JavafxResolve.java:1228)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.resolveIdent(JavafxResolve.java:1423)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitIdent(JavafxAttr.java:506)
?? ? ? ?at com.sun.tools.javafx.tree.JFXIdent.accept(JFXIdent.java:52)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:311)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitFunctionInvocation(JavafxAttr.java:2239)
?? ? ? ?at com.sun.tools.javafx.tree.JFXFunctionInvocation.accept(JFXFunctionInvocation.java:53)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:303)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitBlockExpression(JavafxAttr.java:1373)
?? ? ? ?at com.sun.tools.javafx.tree.JFXBlock.accept(JFXBlock.java:83)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:311)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.finishFunctionDefinition(JavafxAttr.java:1863)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxMemberEnter$SymbolCompleter.complete(JavafxMemberEnter.java:646)
?? ? ? ?at com.sun.tools.javac.code.Symbol.complete(Symbol.java:400)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitFunctionDefinition(JavafxAttr.java:1658)
?? ? ? ?at com.sun.tools.javafx.tree.JFXFunctionDefinition.accept(JFXFunctionDefinition.java:93)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:321)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxMemberEnter$SymbolCompleter.complete(JavafxMemberEnter.java:643)
?? ? ? ?at com.sun.tools.javac.code.Symbol.complete(Symbol.java:400)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findMemberWithoutAccessChecks(JavafxResolve.java:943)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findMember(JavafxResolve.java:906)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findMember(JavafxResolve.java:886)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findVar(JavafxResolve.java:567)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.findIdent(JavafxResolve.java:1228)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxResolve.resolveIdent(JavafxResolve.java:1423)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitIdent(JavafxAttr.java:506)
?? ? ? ?at com.sun.tools.javafx.tree.JFXIdent.accept(JFXIdent.java:52)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:311)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitFunctionInvocation(JavafxAttr.java:2239)
?? ? ? ?at com.sun.tools.javafx.tree.JFXFunctionInvocation.accept(JFXFunctionInvocation.java:53)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:303)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitBlockExpression(JavafxAttr.java:1373)
?? ? ? ?at com.sun.tools.javafx.tree.JFXBlock.accept(JFXBlock.java:83)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribExpr(JavafxAttr.java:311)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.finishFunctionDefinition(JavafxAttr.java:1863)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxMemberEnter$SymbolCompleter.complete(JavafxMemberEnter.java:646)
?? ? ? ?at com.sun.tools.javac.code.Symbol.complete(Symbol.java:400)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.visitFunctionDefinition(JavafxAttr.java:1658)
?? ? ? ?at com.sun.tools.javafx.tree.JFXFunctionDefinition.accept(JFXFunctionDefinition.java:93)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:280)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribTree(JavafxAttr.java:265)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribDecl(JavafxAttr.java:334)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribClassBody(JavafxAttr.java:3696)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribClass(JavafxAttr.java:2808)
?? ? ? ?at com.sun.tools.javafx.comp.JavafxAttr.attribClass(JavafxAttr.java:2763)
?? ? ? ?at com.sun.tools.javafx.main.JavafxCompiler.attribute(JavafxCompiler.java:936)
?? ? ? ?at com.sun.tools.javafx.main.JavafxCompiler.compile2(JavafxCompiler.java:782)
?? ? ? ?at com.sun.tools.javafx.main.JavafxCompiler.compile(JavafxCompiler.java:685)
?? ? ? ?at com.sun.tools.javafx.main.Main.compile(Main.java:624)
?? ? ? ?at com.sun.tools.javafx.main.Main.compile(Main.java:312)
?? ? ? ?at com.sun.tools.javafx.Main.compile(Main.java:84)
?? ? ? ?at com.sun.tools.javafx.Main.main(Main.java:69)
  相关解决方案