Denis Kudriashov wrote > 2017-10-04 11:56 GMT+02:00 Henrik Sperre Johansen <
> henrik.s.johansen@ >>: > >> Denis Kudriashov wrote >> > Generally it is same like having pragma with parameters. >> > But with annotation you are not restricted by literal objects. So >> > annotation parameters can be anything. >> > >> > And it is important feature for Commander. >> > For example I need instance of KMKeyCombination to define shortcut for >> > command. So I just use normal expression for this: >> > >> > RenamePackageCommand class>>packageBrowserShortcutActivation >> > > <classAnnotation> >> > ^CmdShortcutCommandActivation by: *$r meta* for: >> ClyPackageBrowserContext >> > >> > >> > It will be very complicated to express it with method pragma and it >> will >> > be >> > restricted anyway. >> >> Would it? >> With pure method tags, you'd do something like: >> SomeClass >> #renamePackage: aPackage >> > <command: 'Rename package' >> > category: 'Package' >> order: 25 >> shortcut: #($r meta)> >> ... method renaming package here ... > > Then have different pragma traversers capable of creating the actual menus > / >> commands invoking such methods. >> > > So instead of simple subclassing of ClassAnnotation you would suggest me > to > implement pragma traversal/interpreter? > I would prefer first. It gives me for free the object with any structure > without any tricky literal interpretation logic. > For me annotation is just obviously simpler solution. A traverser doesn't have to be a lot of work; http://forum.world.st/Having-comments-for-pragma-tp4902987p4903058.html Denis Kudriashov wrote > Also try to think how to support blocks in parameters with pragma > approach. > And how fun would be to debug them. > It is for the question about > "restricted anyway". You wouldn't need them. What to do with the tag, is up to the traverser. For instance, #perform'ing one of the literal args on the domain class traverser creates, returning an appropriate block, if strictly necessary. Denis Kudriashov wrote > Really, with annotations you have normal smalltalk > code for annotating classes. No magic. And implementation is really > simple. Same with a traverser; the normal smalltalk code to create your domain objects is simply in a different place; the traverser part of the package defining said domain, rather than as an extension method marked with a tag. I guess it's best to just agree to disagree, and since you're the one implementing... ;) Looking forward to trying it out! Cheers, Henry -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html