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.