In general, with these declarative features that are declared at the class level, think about what you can pre-resolve when the features are declared and then use for multiple instances during their construction. Keep in mind that class statics are copied to subclasses, so it may be possible to make the resolving logic cumulative with existing computed results. Or it may be necessary to obliterate every time features of the type are declared. This can still be better than construction time work, since classes are created once, but we expect many instances of widgets to be created.