Interesting. Nice custom analysis.
The next thing would be to detect the projects that actually do use Cook. I suspect that the largest client is DSM. Could you try this one?
Cheers, Doru
On 18 Oct 2012, at 20:34, Nicolas Anquetil Nicolas.Anquetil@inria.fr wrote:
On 16/10/12 11:22, Tudor Girba wrote:
I have been willing to push moosechef for more than a year I think :-( I will try to put some effort there
Great. This is indeed a large and vague task. Let's synchronize around it and create detailed tasks. Could you propose a small set?
Cheers, Doru
I spent a lot of time today trying to figure this out with Moose. Kind of "eat your own dog food" experience. But with no success (with Moose alone).
So I went for something less radical, here are some numbers:
1- find all method protocols implementing Cook or navigation methods
(FAMIXNamedEntity withAllSubclasses flatCollectAsSet: [:c | c protocols]) select: [:s | s beginsWith: '*Famix-Extensions'] -> 5 (FAMIXNamedEntity withAllSubclasses flatCollectAsSet: [:c | c protocols]) select: [:s | s beginsWith: '*famix-extensions'] -> 29
- select manually the relevant ones
-> 20 cookProtocols := { '*famix-extensions-nav Potential Incoming Invocations' . '*famix-extensions-cook-Private' . '*famix-extensions-cook-SureOutgoingInvocations' . '*famix-extensions-nav All Dependencies' . '*famix-extensions-nav Static Dependencies' . '*famix-extensions-cook-StaticAccesses' . '*famix-extensions-nav All Incoming Invocations' . '*famix-extensions-nav Sure Outgoing Dependencies' . '*famix-extensions-nav Potential Outgoing Invocations' . '*famix-extensions-invocations' . '*famix-extensions-nav Sure Incoming Invocations' . '*famix-extensions-NavPrivate' . '*famix-extensions-nav All Outgoing Invocations' . '*famix-extensions-nav Inheritance' . '*famix-extensions-Invocations' . '*famix-extensions-cook-SureIncomingInvocations' . '*famix-extensions-nav Sure Incoming Dependencies' . '*famix-extensions-nav Static Accesses' . '*famix-extensions-nav Sure Outgoing Invocations' . '*Famix-Extensions-navigation' }
2- find all the methods in these protocols cookSelector := (cookProtocols flatCollectAsSet: [:p | (Smalltalk allClasses gather: [:e | (e methodsInProtocol: p) collect: [:m | m selector]])]). -> 191
these are the potential methods we want to replace by MooseChef queries
3- build a moose model with packages Moose-* and Famix-*
4- look for all FamixMethods with the name of a cookSelector (extracted above step 2) cookSelectorInMoose := MooseModel root allModels first allMethods select: [:fm | cookSelector includes: fm name] -> 344
5- find all invoking methods (ignoring the one in cookSelectorInMoose) (cookSelectorInMoose flatCollectAsSet: [:m | m queryAllIncomingInvocations opposites]) reject: [:m | cookSelectorInMoose includes: m] -> 358
6- just for fun, check which of the cookSelector are actually called by these last ones ((invokingCook flatCollectAsSet: [:m | m queryAllOutgoingInvocations opposites]) select: [:m | cookSelectorInMoose includes: m]) collectAsSet: [:m | m name] -> 141
so apparently 50 cookSelectors are never invoked outside of "Cook"
nicolas _______________________________________________ Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- www.tudorgirba.com
"If you interrupt the barber while he is cutting your hair, you will end up with a messy haircut."