> 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 ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.