Was is really necessary to introduce pragmas here?
In short: Commander needs pragma to query methods for command lookup. What alternative you could suggest?
I would imagine that your activatorClass can lookup the command simply as: PackageCommand allSubclasses select: [ :c | c isEnabledFor: ⦠] Would this not work? I am personally not keen of using pragma. The worth is when you have no idea what a pragma does and looking for implementors or sender does not help. Here is an example: -=-=-=-=-=-=-=-=-=-=-=-= RadioButtonModel>>canDeselectByClick <api: #inspect> "Return true clicking on a selected radio button deselects it" ^ canDeselectByClick value -=-=-=-=-=-=-=-=-=-=-=-= No idea what is the effect of the #api: pragma. There is no implementor of it. I could also the example of the Fame metamodel. Anyway, the fact that I am kind of complaining should not prevent you from moving ahead. I would be happy having Calypso in the image, even if pragmas. Go go go! Cheers, Alexandre
In details:
Commander caches all activators for each command class. It searches all methods which supply them using pragma and store all retrieved instances in class variable.
To lookup required commands users enumerate cached activators declared for given context: activatorClass allDeclaredFor: aToolContext do: blockWithActivator This process is fast and not produces any garbage.
Also activation methods are supposed to be packaged together with application which provide context for them. They can be in different package than commands. Commands are reusable and can be extended by multiple applications with different set of activation methods. For example in Calypso I will extract separate SystemCommands package which can be reused by other tools like inspector and debugger. And Calypso will "attach" these commands by own set of extension methods.
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.