Overview
Despite its tiny runtime footprint, the Sedona Framework has powerful reflection support for accessing kit, type, and slot meta-data at runtime. However unlike the general purpose reflection found in Java, Sedona reflection is only supported for Component types and Property/Action slots.
Kits
You can access the installed kits with the sys::Kit class:
// iterate over the installed kits foreach (Kit kit : Sys.kits, Sys.kitsLen) Sys.out.print("$kit.name $kit.version ${Sys.hexStr(kit.checksum)}").nl() // look up a kit by name Kit kit = Sys.findKit("sys")
Types
The sys::Type API is used to reflectively work
with types at runtime. Only types that extend from Component
are available for reflection:
// walk the types installed in a given kit Kit kit = Sys.findKit("control") foreach (Type t : kit.types, kit.typesLen) Sys.out.print(" ${kit.name}::${t.name}").nl() // lookup a type by qname Type t = Sys.findType("control::Ramp") // type literal for class User Type t = User.type
If you know the type you need at compile time, you should use type literals since they are most efficient:
UserService s = (UserService)Sys.app.lookupService(UserService.type)
Slots
The sys::Slot API is used to reflectively work with slots at runtime. Only the property and action slots of component types are available for reflection:
// walk a type's slots Type t = App.type foreach (Slot slot : t.slots, t.slotsLen) Sys.out.print(" ${slot.name}: $slot.type.name").nl() // lookup a slot by name Slot restart = t.findSlot("restart") // slot literal for the App action "restart" Slot restart = App.restart
If you know the slot you need at compile time, you should use slot literals since they are most efficient.
Ids
Note that Kit
, Type
, and Slot
each have an id
field, which is a direct index into the
corresponding array:
Id Field | Index Into |
---|---|
Kit.id | Sys.kits |
Type.id | Kit.types |
Slot.id | Type.slots |
This is an extremely efficient way to lookup kits, types, and slots. However, be aware that the id lookup only works within a specific schema. As soon you change the installed kits or the version of those kits, then all of the reflection ids will likely change. This trade-off between the efficiency of id based lookup versus the ability to version kits is the basis of Schemas.