eclipse-archived/ceylon

ClassCastException when CallableConstructorDeclaration.invoke

Closed this issue · 1 comments

This code throws ClassCastException

import ceylon.language.meta.declaration {
    CallableConstructorDeclaration,
    ClassDeclaration
}
import ceylon.time {
    DateTime,
    now
}
interface ITemp{
    shared formal String source;
    shared formal DateTime dateTime;
}

serializable
class Temp(
        shared actual String source,
        shared actual DateTime dateTime = now().dateTime()) satisfies ITemp{
    
    shared actual String string => "Temp:``source``, ``dateTime``";
}
shared void foo(){
        ClassDeclaration decl = `Temp`.declaration;
        assert (exists firstConstructor = decl.constructorDeclarations().first,
            is CallableConstructorDeclaration firstConstructor);
        print(firstConstructor.invoke([], "s"));
}

with stacktrace:

ceylon run: Cannot cast ceylon.language.String to com.redhat.ceylon.compiler.
java.runtime.serialization.$Serialization$
java.lang.ClassCastException: Cannot cast ceylon.language.String to com.redhat.ceylon.compiler.java.runtime.serialization.$Serialization$
	at java.lang.invoke.MethodHandleImpl.newClassCastException(MethodHandleImpl.java:361)
	at java.lang.invoke.MethodHandleImpl.castReference(MethodHandleImpl.java:356)
	at com.redhat.ceylon.compiler.java.runtime.metamodel.ConstructorDispatch.$call$(ConstructorDispatch.java:612)
	at com.redhat.ceylon.compiler.java.Util.apply(Util.java:1634)
	at com.redhat.ceylon.compiler.java.runtime.metamodel.Metamodel.apply(Metamodel.java:1891)
	at com.redhat.ceylon.compiler.java.runtime.metamodel.ConstructorDispatch.apply(ConstructorDispatch.java:762)
	at com.redhat.ceylon.compiler.java.runtime.metamodel.meta.ClassImpl.apply(ClassImpl.java:410)
	at com.redhat.ceylon.compiler.java.runtime.metamodel.meta.ClassInitializerConstructor.apply(ClassInitializerConstructor.java:81)
	at com.redhat.ceylon.compiler.java.runtime.metamodel.decl.ClassWithInitializerDeclarationConstructor.invoke(ClassWithInitializerDeclarationConstructor.java:225)
	at test.sample14.foo_.foo(run.ceylon:34)
	at test.sample14.foo_.main(run.ceylon)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at ceylon.modules.api.runtime.SecurityActions.invokeRunInternal(SecurityActions.java:57)
	at ceylon.modules.api.runtime.SecurityActions.invokeRun(SecurityActions.java:48)
	at ceylon.modules.api.runtime.AbstractRuntime.invokeRun(AbstractRuntime.java:68)
	at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:105)
	at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:101)
	at ceylon.modules.Main.execute(Main.java:69)
	at ceylon.modules.Main.main(Main.java:42)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.jboss.modules.Module.run(Module.java:308)
	at org.jboss.modules.Main.main(Main.java:487)
	at ceylon.modules.bootstrap.CeylonRunTool.run(CeylonRunTool.java:367)
	at com.redhat.ceylon.common.tools.CeylonTool.run(CeylonTool.java:547)
	at com.redhat.ceylon.common.tools.CeylonTool.execute(CeylonTool.java:423)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.redhat.ceylon.launcher.Launcher.runInJava7Checked(Launcher.java:108)
	at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:38)
	at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:31)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.redhat.ceylon.launcher.Bootstrap.runVersion(Bootstrap.java:162)
	at com.redhat.ceylon.launcher.Bootstrap.runInternal(Bootstrap.java:117)
	at com.redhat.ceylon.launcher.Bootstrap.run(Bootstrap.java:93)

problem disapears when you remove serializable annotation

Fixed, thanks.