import ceylon.language.meta.model{ Type, ValueConstructor, IncompatibleTypeException, StorageException, MemberClassValueConstructor } import ceylon.language.meta.declaration { CallableConstructorDeclaration } """Declaration model for value constructors, for example class Currency { "The US Dollar" shared new usd {} // ... } ValueConstructorDeclaration dollars = `new Currency.usd`; """ see (`interface CallableConstructorDeclaration`) since("1.2.0") shared sealed interface ValueConstructorDeclaration satisfies GettableDeclaration & ConstructorDeclaration { "The class this constructor constructs" shared actual formal ClassDeclaration container; "Apply the given closed type argument to this toplevel value constructor to obtain as value constructor model." shared formal ValueConstructor<Result> apply<Result=Anything>(); "Apply the given closed type argument to this member value constructor to obtain as value constructor model." shared formal MemberClassValueConstructor<Container, Result> memberApply <Container=Nothing, Result=Anything> (Type<Object> containerType); "Reads the current value of this toplevel value." shared actual default Object get() => apply<Object>().get(); "Reads the current value of this attribute on the given container instance." throws(`class IncompatibleTypeException`, "If the specified container is not compatible with this attribute.") throws(`class StorageException`, "If this attribute is not stored at runtime, for example if it is neither shared nor captured.") shared actual default Object memberGet(Object container) => memberApply<Nothing, Object>(`Nothing`).bind(container).get(); /*"Sets the current value of this toplevel value." shared actual default void set(Nothing newValue) { throw; } "Sets the current value of this attribute on the given container instance." throws(`class IncompatibleTypeException`, "If the specified container or new value type is not compatible with this attribute.") throws(`class StorageException`, "If this attribute is not stored at runtime, for example if it is neither shared nor captured.") shared actual formal void memberSet(Object container, Nothing newValue) { throw; }*/ /*shared actual formal Value<Get,Nothing> apply<Get,Set>(); shared actual formal Attribute<Container,Get,Nothing> memberApply<Container,Get,Set>(Type<Object> containerType);*/ }