"""The Ceylon metamodel open type and declaration package. As described in the [ceylon.language.meta](../index.html) documentation, this package contains all the types that represent Ceylon declarations and open types. ### Usage example The following code will list all the classes in the `ceylon.language` package and print their extended type: for(decl in `package ceylon.language`.members<ClassDeclaration>()){ if(exists extendedType = decl.extendedType){ print("Class ``decl.name`` extends: ``extendedType``"); }else{ print("Class ``decl.name`` does not extend anything"); } } The following code will iterate all the class declarations in the `ceylon.language` package that are not abstract, anonymous or annotations, and that have no type parameters nor initialiser parameters. For each matching class, we will apply it to get a class model which we can then use to instantiate the class and display its instance: for(decl in `package ceylon.language`.members<ClassDeclaration>()){ if(!decl.abstract && !decl.anonymous && !decl.annotation && decl.parameterDeclarations.empty && decl.typeParameterDeclarations.empty){ Class<Object,[]> classModel = decl.classApply<Object,[]>(); Object instance = classModel(); print("Instance of ``decl.name`` is: ``instance``"); } } """ by ("Gavin King", "Stephane Epardaud", "Tom Bentley") tagged("Metamodel") shared package ceylon.language.meta.declaration;