| 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(); |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| } |
| |