Classes that use the most a class

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

Classes that use the most a class

laurent laffont
Hi,

In a Java project I have a class - let's call it Zork.

I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).

I'm sure it's possible but I'm a Moose newbie :)

How can I do it ?


Laurent Laffont - @lolgzs

Pharo Smalltalk Screencasts: http://www.pharocasts.com/
Blog: http://magaloma.blogspot.com/

_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

Tudor Girba
Hi Laurent,

You are getting in the right mode :).

- Select the group of classes you want to visualize
- Right click and select Open in Mondrian Easel
- Add and generate view:

view shape rectangle height: [:each | each invokingClasses size].
view nodes: classGroup.
view edgesFrom: #superclass.
view treeLayout

Cheers,
Doru


On 20 Apr 2011, at 17:03, laurent laffont wrote:

> Hi,
>
> In a Java project I have a class - let's call it Zork.
>
> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
>
> I'm sure it's possible but I'm a Moose newbie :)
>
> How can I do it ?
>
>
> Laurent Laffont - @lolgzs
>
> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
> Blog: http://magaloma.blogspot.com/
> Developer group: http://cara74.seasidehosting.st
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"No matter how many recipes we know, we still value a chef."







_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

laurent laffont
On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
Hi Laurent,

You are getting in the right mode :).

- Select the group of classes you want to visualize
- Right click and select Open in Mondrian Easel
- Add and generate view:

view shape rectangle height: [:each | each invokingClasses size].
view nodes: classGroup.
view edgesFrom: #superclass.
view treeLayout


hehe, start to look interesting ;)

But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.

Then I should be able to right-click a method => browse source.

Laurent.


 
Cheers,
Doru


On 20 Apr 2011, at 17:03, laurent laffont wrote:

> Hi,
>
> In a Java project I have a class - let's call it Zork.
>
> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
>
> I'm sure it's possible but I'm a Moose newbie :)
>
> How can I do it ?
>
>
> Laurent Laffont - @lolgzs
>
> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
> Blog: http://magaloma.blogspot.com/
> Developer group: http://cara74.seasidehosting.st
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"No matter how many recipes we know, we still value a chef."







_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

jfabry

On 20 Apr 2011, at 11:42, laurent laffont wrote:

On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
Hi Laurent,

You are getting in the right mode :).

- Select the group of classes you want to visualize
- Right click and select Open in Mondrian Easel
- Add and generate view:

view shape rectangle height: [:each | each invokingClasses size].
view nodes: classGroup.
view edgesFrom: #superclass.
view treeLayout


hehe, start to look interesting ;)

But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.

Use nodes: forEach: for this, see the easel examples, the subemnu called "subview" for some ... examples :-)

Then I should be able to right-click a method => browse source.

two possibilities, send a message to the node like this: 

view interaction item: 'inspect' action: #inspect.

or use a block like this:

view interaction item: 'inspect' action: [:node | ... ]

Have fun!
--
Johan Fabry   
PLEIAD Lab - Computer Science Department (DCC) - University of Chile




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

simondenier
In reply to this post by laurent laffont

On 20 avr. 2011, at 17:42, laurent laffont wrote:

On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
Hi Laurent,

You are getting in the right mode :).

- Select the group of classes you want to visualize
- Right click and select Open in Mondrian Easel
- Add and generate view:

view shape rectangle height: [:each | each invokingClasses size].
view nodes: classGroup.
view edgesFrom: #superclass.
view treeLayout


hehe, start to look interesting ;)

But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.

Then I should be able to right-click a method => browse source.


view shape rectangle height: [:each | each invokingClasses size].
view nodes: classGroup forEach: [ :cls |
view shape rectangle height: [ :m | m invokingClasses size ].
view interaction item: 'browse' action: #browseSource.
view nodes: cls methods ].
view edgesFrom: #superclass.
view treeLayout


But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities



Laurent.


 
Cheers,
Doru


On 20 Apr 2011, at 17:03, laurent laffont wrote:

> Hi,
>
> In a Java project I have a class - let's call it Zork.
>
> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
>
> I'm sure it's possible but I'm a Moose newbie :)
>
> How can I do it ?
>
>
> Laurent Laffont - @lolgzs
>
> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
> Blog: http://magaloma.blogspot.com/
> Developer group: http://cara74.seasidehosting.st
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"No matter how many recipes we know, we still value a chef."







_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev

_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
Simon Denier




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

Tudor Girba
Hi,

On 20 Apr 2011, at 20:19, Simon Denier wrote:

>
> On 20 avr. 2011, at 17:42, laurent laffont wrote:
>
>> On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
>> Hi Laurent,
>>
>> You are getting in the right mode :).
>>
>> - Select the group of classes you want to visualize
>> - Right click and select Open in Mondrian Easel
>> - Add and generate view:
>>
>> view shape rectangle height: [:each | each invokingClasses size].
>> view nodes: classGroup.
>> view edgesFrom: #superclass.
>> view treeLayout
>>
>>
>> hehe, start to look interesting ;)
>>
>> But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.
>>
>> Then I should be able to right-click a method => browse source.
>
>
> view shape rectangle height: [:each | each invokingClasses size].
> view nodes: classGroup forEach: [ :cls |
> view shape rectangle height: [ :m | m invokingClasses size ].
> view interaction item: 'browse' action: #browseSource.
> view nodes: cls methods ].
> view edgesFrom: #superclass.
> view treeLayout

I think Laurent wanted only specific references to count. Here is a possible script:

| targetMethods |
targetMethods := classGroup flatCollect: #methods.
view interaction menu: #mooseMenu.
view nodes: classGroup forEach: [:each |
        view shape rectangle
                linearFillColor: [:method |
                        (method invokingMethods select: [:m | m belongsTo name = 'Zork']) size]
                within: targetMethods.  
        view interaction menu: #mooseMenu.
        view nodes: each methods.
        view gridLayout gapSize: 2].
view edgesFrom: #superclass.
view treeLayout

Cheers,
Doru


>
> But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities
>
>
>>
>> Laurent.
>>
>>
>>  
>> Cheers,
>> Doru
>>
>>
>> On 20 Apr 2011, at 17:03, laurent laffont wrote:
>>
>> > Hi,
>> >
>> > In a Java project I have a class - let's call it Zork.
>> >
>> > I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
>> >
>> > I'm sure it's possible but I'm a Moose newbie :)
>> >
>> > How can I do it ?
>> >
>> >
>> > Laurent Laffont - @lolgzs
>> >
>> > Pharo Smalltalk Screencasts: http://www.pharocasts.com/
>> > Blog: http://magaloma.blogspot.com/
>> > Developer group: http://cara74.seasidehosting.st
>> >
>> > _______________________________________________
>> > Moose-dev mailing list
>> > [hidden email]
>> > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>> --
>> www.tudorgirba.com
>>
>> "No matter how many recipes we know, we still value a chef."
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Moose-dev mailing list
>> [hidden email]
>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>> _______________________________________________
>> Moose-dev mailing list
>> [hidden email]
>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> Simon Denier
>
>
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"Don't give to get. Just give."






_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

simondenier

On 20 avr. 2011, at 20:45, Tudor Girba wrote:

> Hi,
>
> On 20 Apr 2011, at 20:19, Simon Denier wrote:
>
>>
>> On 20 avr. 2011, at 17:42, laurent laffont wrote:
>>
>>> On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
>>> Hi Laurent,
>>>
>>> You are getting in the right mode :).
>>>
>>> - Select the group of classes you want to visualize
>>> - Right click and select Open in Mondrian Easel
>>> - Add and generate view:
>>>
>>> view shape rectangle height: [:each | each invokingClasses size].
>>> view nodes: classGroup.
>>> view edgesFrom: #superclass.
>>> view treeLayout
>>>
>>>
>>> hehe, start to look interesting ;)
>>>
>>> But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.
>>>
>>> Then I should be able to right-click a method => browse source.
>>
>>
>> view shape rectangle height: [:each | each invokingClasses size].
>> view nodes: classGroup forEach: [ :cls |
>> view shape rectangle height: [ :m | m invokingClasses size ].
>> view interaction item: 'browse' action: #browseSource.
>> view nodes: cls methods ].
>> view edgesFrom: #superclass.
>> view treeLayout
>
> I think Laurent wanted only specific references to count. Here is a possible script:
>
> | targetMethods |
> targetMethods := classGroup flatCollect: #methods.
> view interaction menu: #mooseMenu.
> view nodes: classGroup forEach: [:each |
> view shape rectangle
> linearFillColor: [:method |
> (method invokingMethods select: [:m | m belongsTo name = 'Zork']) size]



method queryIncomingInvocations opposites withinClass: (model entityNamed: 'Zork')

http://www.moosetechnology.org/docs/famix/MooseChef
;)

Just need to rewrite
FAMIXMethod>>invokingMethods
        ^ self queryIncomingInvocations opposites

And you can do
zorkClass := model entityNamed: 'Zork'.
(...)
method invokingMethods withinClass: zorkClass



> within: targetMethods.  
> view interaction menu: #mooseMenu.
> view nodes: each methods.
> view gridLayout gapSize: 2].
> view edgesFrom: #superclass.
> view treeLayout
>
> Cheers,
> Doru
>
>
>>
>> But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities
>>
>>
>>>
>>> Laurent.
>>>
>>>
>>>
>>> Cheers,
>>> Doru
>>>
>>>
>>> On 20 Apr 2011, at 17:03, laurent laffont wrote:
>>>
>>>> Hi,
>>>>
>>>> In a Java project I have a class - let's call it Zork.
>>>>
>>>> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
>>>>
>>>> I'm sure it's possible but I'm a Moose newbie :)
>>>>
>>>> How can I do it ?
>>>>
>>>>
>>>> Laurent Laffont - @lolgzs
>>>>
>>>> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
>>>> Blog: http://magaloma.blogspot.com/
>>>> Developer group: http://cara74.seasidehosting.st
>>>>
>>>> _______________________________________________
>>>> Moose-dev mailing list
>>>> [hidden email]
>>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>
>>> --
>>> www.tudorgirba.com
>>>
>>> "No matter how many recipes we know, we still value a chef."
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Moose-dev mailing list
>>> [hidden email]
>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>
>>> _______________________________________________
>>> Moose-dev mailing list
>>> [hidden email]
>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>> --
>> Simon Denier
>>
>>
>>
>> _______________________________________________
>> Moose-dev mailing list
>> [hidden email]
>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> www.tudorgirba.com
>
> "Don't give to get. Just give."
>
>
>
>
>
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
Simon Denier




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

laurent laffont
Thanks for your help but I'm a little lost :) 

I think I should rephrase my needs.


I have the class Bibacarte (this name is real). I open the Moose Code Browser, select this class, right-click Open in Mondrian Easel.

So now I have Mondrian opened on class->Bibacarte.
class class =>  FAMIXClass
class asString =>  'Bibacarte in net::sa::afi::home (Type)'
class queryAllIncomingInvocations a MooseIncomingQueryResult(creerAbonne -> #Bibacarte() (Invocation) compare -> #getId() (Invocation) chargerCarte -> #getId() (Invocation) controlerCodeBarre -> #getId() (Invocation) getHistoCarte -> #getId() (Invocation) equals -> #getId() (Invocation)  .......
class queryAllIncomingInvocations size => 103

It seems #queryAllIncomingInvocations  is the right method that returns all methods that reference Bibacarte

I want to group all these invocations per class, and in the visualization the higher the number of invocations is, the bigger is the rectangle.

In the class rectangle I want to see the methods that invoke a method on Bibacarte (a rectangle by method - I don't want to see methods that don't invoke a method on Bibacarte). Now the more a method invoke a Bibacarte method, the bigger (or darker) the rectangle is.

I'm searching / learning in Moose but that's not a tiny platform :)

Laurent.



On Wed, Apr 20, 2011 at 11:49 PM, Simon Denier <[hidden email]> wrote:

On 20 avr. 2011, at 20:45, Tudor Girba wrote:

> Hi,
>
> On 20 Apr 2011, at 20:19, Simon Denier wrote:
>
>>
>> On 20 avr. 2011, at 17:42, laurent laffont wrote:
>>
>>> On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
>>> Hi Laurent,
>>>
>>> You are getting in the right mode :).
>>>
>>> - Select the group of classes you want to visualize
>>> - Right click and select Open in Mondrian Easel
>>> - Add and generate view:
>>>
>>> view shape rectangle height: [:each | each invokingClasses size].
>>> view nodes: classGroup.
>>> view edgesFrom: #superclass.
>>> view treeLayout
>>>
>>>
>>> hehe, start to look interesting ;)
>>>
>>> But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.
>>>
>>> Then I should be able to right-click a method => browse source.
>>
>>
>> view shape rectangle height: [:each | each invokingClasses size].
>> view nodes: classGroup forEach: [ :cls |
>>      view shape rectangle height: [ :m | m invokingClasses size ].
>>      view interaction item: 'browse' action: #browseSource.
>>      view nodes: cls methods ].
>> view edgesFrom: #superclass.
>> view treeLayout
>
> I think Laurent wanted only specific references to count. Here is a possible script:
>
> | targetMethods |
> targetMethods := classGroup flatCollect: #methods.
> view interaction menu: #mooseMenu.
> view nodes: classGroup forEach: [:each |
>       view shape rectangle
>               linearFillColor: [:method |
>                       (method invokingMethods select: [:m | m belongsTo name = 'Zork']) size]



method queryIncomingInvocations opposites withinClass: (model entityNamed: 'Zork')

http://www.moosetechnology.org/docs/famix/MooseChef
;)

Just need to rewrite
FAMIXMethod>>invokingMethods
       ^ self queryIncomingInvocations opposites

And you can do
zorkClass := model entityNamed: 'Zork'.
(...)
method invokingMethods withinClass: zorkClass



>               within: targetMethods.
>       view interaction menu: #mooseMenu.
>       view nodes: each methods.
>       view gridLayout gapSize: 2].
> view edgesFrom: #superclass.
> view treeLayout
>
> Cheers,
> Doru
>
>
>>
>> But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities
>>
>>
>>>
>>> Laurent.
>>>
>>>
>>>
>>> Cheers,
>>> Doru
>>>
>>>
>>> On 20 Apr 2011, at 17:03, laurent laffont wrote:
>>>
>>>> Hi,
>>>>
>>>> In a Java project I have a class - let's call it Zork.
>>>>
>>>> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
>>>>
>>>> I'm sure it's possible but I'm a Moose newbie :)
>>>>
>>>> How can I do it ?
>>>>
>>>>
>>>> Laurent Laffont - @lolgzs
>>>>
>>>> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
>>>> Blog: http://magaloma.blogspot.com/
>>>> Developer group: http://cara74.seasidehosting.st
>>>>
>>>> _______________________________________________
>>>> Moose-dev mailing list
>>>> [hidden email]
>>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>
>>> --
>>> www.tudorgirba.com
>>>
>>> "No matter how many recipes we know, we still value a chef."
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Moose-dev mailing list
>>> [hidden email]
>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>>
>>> _______________________________________________
>>> Moose-dev mailing list
>>> [hidden email]
>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>>
>> --
>> Simon Denier
>>
>>
>>
>> _______________________________________________
>> Moose-dev mailing list
>> [hidden email]
>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> www.tudorgirba.com
>
> "Don't give to get. Just give."
>
>
>
>
>
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
Simon Denier




_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

Tudor Girba
Hi,

There seem to be two mismatches between what you want and what we gave you.

1. We started from the group of all classes that you want to visualize, and relied on the name of the special class. You opened the Easel on the class.

2. Our visualization scripts indeed showed all methods from the class. All you have to do is select those methods that are of interest to you.


So, try this:
- select your class and open it in Mondrian Easel

- execute:

view interaction menu: #mooseMenu.
view nodes: class mooseModel allModelClasses forEach: [:eachClass |
        view shape rectangle height: [:method | (method invokedMethods select: [:m | m belongsTo = class]) size].  
        view interaction menu: #mooseMenu.
        view nodes: (eachClass methods select: [:m | m invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]).
        view gridLayout gapSize: 2].
view edgesFrom: #superclass.
view treeLayout

Cheers,
Doru


On 21 Apr 2011, at 09:34, laurent laffont wrote:

> Thanks for your help but I'm a little lost :)
>
> I think I should rephrase my needs.
>
>
> I have the class Bibacarte (this name is real). I open the Moose Code Browser, select this class, right-click Open in Mondrian Easel.
>
> So now I have Mondrian opened on class->Bibacarte.
> class class =>  FAMIXClass
> class asString =>  'Bibacarte in net::sa::afi::home (Type)'
> class queryAllIncomingInvocations a MooseIncomingQueryResult(creerAbonne -> #Bibacarte() (Invocation) compare -> #getId() (Invocation) chargerCarte -> #getId() (Invocation) controlerCodeBarre -> #getId() (Invocation) getHistoCarte -> #getId() (Invocation) equals -> #getId() (Invocation)  .......
> class queryAllIncomingInvocations size => 103
>
> It seems #queryAllIncomingInvocations  is the right method that returns all methods that reference Bibacarte
>
> I want to group all these invocations per class, and in the visualization the higher the number of invocations is, the bigger is the rectangle.
>
> In the class rectangle I want to see the methods that invoke a method on Bibacarte (a rectangle by method - I don't want to see methods that don't invoke a method on Bibacarte). Now the more a method invoke a Bibacarte method, the bigger (or darker) the rectangle is.
>
> I'm searching / learning in Moose but that's not a tiny platform :)
>
> Laurent.
>
>
>
> On Wed, Apr 20, 2011 at 11:49 PM, Simon Denier <[hidden email]> wrote:
>
> On 20 avr. 2011, at 20:45, Tudor Girba wrote:
>
> > Hi,
> >
> > On 20 Apr 2011, at 20:19, Simon Denier wrote:
> >
> >>
> >> On 20 avr. 2011, at 17:42, laurent laffont wrote:
> >>
> >>> On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
> >>> Hi Laurent,
> >>>
> >>> You are getting in the right mode :).
> >>>
> >>> - Select the group of classes you want to visualize
> >>> - Right click and select Open in Mondrian Easel
> >>> - Add and generate view:
> >>>
> >>> view shape rectangle height: [:each | each invokingClasses size].
> >>> view nodes: classGroup.
> >>> view edgesFrom: #superclass.
> >>> view treeLayout
> >>>
> >>>
> >>> hehe, start to look interesting ;)
> >>>
> >>> But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.
> >>>
> >>> Then I should be able to right-click a method => browse source.
> >>
> >>
> >> view shape rectangle height: [:each | each invokingClasses size].
> >> view nodes: classGroup forEach: [ :cls |
> >>      view shape rectangle height: [ :m | m invokingClasses size ].
> >>      view interaction item: 'browse' action: #browseSource.
> >>      view nodes: cls methods ].
> >> view edgesFrom: #superclass.
> >> view treeLayout
> >
> > I think Laurent wanted only specific references to count. Here is a possible script:
> >
> > | targetMethods |
> > targetMethods := classGroup flatCollect: #methods.
> > view interaction menu: #mooseMenu.
> > view nodes: classGroup forEach: [:each |
> >       view shape rectangle
> >               linearFillColor: [:method |
> >                       (method invokingMethods select: [:m | m belongsTo name = 'Zork']) size]
>
>
>
> method queryIncomingInvocations opposites withinClass: (model entityNamed: 'Zork')
>
> http://www.moosetechnology.org/docs/famix/MooseChef
> ;)
>
> Just need to rewrite
> FAMIXMethod>>invokingMethods
>        ^ self queryIncomingInvocations opposites
>
> And you can do
> zorkClass := model entityNamed: 'Zork'.
> (...)
> method invokingMethods withinClass: zorkClass
>
>
>
> >               within: targetMethods.
> >       view interaction menu: #mooseMenu.
> >       view nodes: each methods.
> >       view gridLayout gapSize: 2].
> > view edgesFrom: #superclass.
> > view treeLayout
> >
> > Cheers,
> > Doru
> >
> >
> >>
> >> But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities
> >>
> >>
> >>>
> >>> Laurent.
> >>>
> >>>
> >>>
> >>> Cheers,
> >>> Doru
> >>>
> >>>
> >>> On 20 Apr 2011, at 17:03, laurent laffont wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> In a Java project I have a class - let's call it Zork.
> >>>>
> >>>> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
> >>>>
> >>>> I'm sure it's possible but I'm a Moose newbie :)
> >>>>
> >>>> How can I do it ?
> >>>>
> >>>>
> >>>> Laurent Laffont - @lolgzs
> >>>>
> >>>> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
> >>>> Blog: http://magaloma.blogspot.com/
> >>>> Developer group: http://cara74.seasidehosting.st
> >>>>
> >>>> _______________________________________________
> >>>> Moose-dev mailing list
> >>>> [hidden email]
> >>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >>>
> >>> --
> >>> www.tudorgirba.com
> >>>
> >>> "No matter how many recipes we know, we still value a chef."
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> Moose-dev mailing list
> >>> [hidden email]
> >>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >>>
> >>> _______________________________________________
> >>> Moose-dev mailing list
> >>> [hidden email]
> >>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >>
> >> --
> >> Simon Denier
> >>
> >>
> >>
> >> _______________________________________________
> >> Moose-dev mailing list
> >> [hidden email]
> >> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >
> > --
> > www.tudorgirba.com
> >
> > "Don't give to get. Just give."
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > Moose-dev mailing list
> > [hidden email]
> > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> Simon Denier
>
>
>
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"Reasonable is what we are accustomed with."


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

laurent laffont
On Thu, Apr 21, 2011 at 8:33 PM, Tudor Girba <[hidden email]> wrote:
Hi,

There seem to be two mismatches between what you want and what we gave you.

1. We started from the group of all classes that you want to visualize, and relied on the name of the special class. You opened the Easel on the class.

2. Our visualization scripts indeed showed all methods from the class. All you have to do is select those methods that are of interest to you.


So, try this:
- select your class and open it in Mondrian Easel

- execute:

view interaction menu: #mooseMenu.
view nodes: class mooseModel allModelClasses forEach: [:eachClass |
       view shape rectangle height: [:method | (method invokedMethods select: [:m | m belongsTo = class]) size].
       view interaction menu: #mooseMenu.
       view nodes: (eachClass methods select: [:m | m invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]).
       view gridLayout gapSize: 2].
view edgesFrom: #superclass.
view treeLayout



Thanks Doru. With your snippet I have some empty (class) squares. So it seems the thing that I want is:

|dependentClasses|
dependentClasses := (class mooseModel allModelClasses select: [:aClass| 
aClass methods anySatisfy: [:aMethod| 
aMethod invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]]).

view interaction menu: #mooseMenu.
view nodes: dependentClasses forEach: [:eachClass |
       view shape rectangle height: [:method | (method invokedMethods select: [:m | m belongsTo = class]) size].
       view interaction menu: #mooseMenu.
       view nodes: (eachClass methods select: [:m | m invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]).
       view gridLayout gapSize: 2].
view edgesFrom: #superclass.
view treeLayout


The first line looks ugly so maybe there's some methods that do this for free (also there's code duplication with the "view nodes: (eachClass methods ...." line).


Now let's go a little further ;)

This script useful for me. So I would like an entry in the Moose code browser menu so when I right-click on a class I can choose "Show users in Mondrian".

OK, I promise to record a screencast on Moose ;)


Laurent


 
Cheers,
Doru


On 21 Apr 2011, at 09:34, laurent laffont wrote:

> Thanks for your help but I'm a little lost :)
>
> I think I should rephrase my needs.
>
>
> I have the class Bibacarte (this name is real). I open the Moose Code Browser, select this class, right-click Open in Mondrian Easel.
>
> So now I have Mondrian opened on class->Bibacarte.
> class class =>  FAMIXClass
> class asString =>  'Bibacarte in net::sa::afi::home (Type)'
> class queryAllIncomingInvocations a MooseIncomingQueryResult(creerAbonne -> #Bibacarte() (Invocation) compare -> #getId() (Invocation) chargerCarte -> #getId() (Invocation) controlerCodeBarre -> #getId() (Invocation) getHistoCarte -> #getId() (Invocation) equals -> #getId() (Invocation)  .......
> class queryAllIncomingInvocations size => 103
>
> It seems #queryAllIncomingInvocations  is the right method that returns all methods that reference Bibacarte
>
> I want to group all these invocations per class, and in the visualization the higher the number of invocations is, the bigger is the rectangle.
>
> In the class rectangle I want to see the methods that invoke a method on Bibacarte (a rectangle by method - I don't want to see methods that don't invoke a method on Bibacarte). Now the more a method invoke a Bibacarte method, the bigger (or darker) the rectangle is.
>
> I'm searching / learning in Moose but that's not a tiny platform :)
>
> Laurent.
>
>
>
> On Wed, Apr 20, 2011 at 11:49 PM, Simon Denier <[hidden email]> wrote:
>
> On 20 avr. 2011, at 20:45, Tudor Girba wrote:
>
> > Hi,
> >
> > On 20 Apr 2011, at 20:19, Simon Denier wrote:
> >
> >>
> >> On 20 avr. 2011, at 17:42, laurent laffont wrote:
> >>
> >>> On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
> >>> Hi Laurent,
> >>>
> >>> You are getting in the right mode :).
> >>>
> >>> - Select the group of classes you want to visualize
> >>> - Right click and select Open in Mondrian Easel
> >>> - Add and generate view:
> >>>
> >>> view shape rectangle height: [:each | each invokingClasses size].
> >>> view nodes: classGroup.
> >>> view edgesFrom: #superclass.
> >>> view treeLayout
> >>>
> >>>
> >>> hehe, start to look interesting ;)
> >>>
> >>> But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.
> >>>
> >>> Then I should be able to right-click a method => browse source.
> >>
> >>
> >> view shape rectangle height: [:each | each invokingClasses size].
> >> view nodes: classGroup forEach: [ :cls |
> >>      view shape rectangle height: [ :m | m invokingClasses size ].
> >>      view interaction item: 'browse' action: #browseSource.
> >>      view nodes: cls methods ].
> >> view edgesFrom: #superclass.
> >> view treeLayout
> >
> > I think Laurent wanted only specific references to count. Here is a possible script:
> >
> > | targetMethods |
> > targetMethods := classGroup flatCollect: #methods.
> > view interaction menu: #mooseMenu.
> > view nodes: classGroup forEach: [:each |
> >       view shape rectangle
> >               linearFillColor: [:method |
> >                       (method invokingMethods select: [:m | m belongsTo name = 'Zork']) size]
>
>
>
> method queryIncomingInvocations opposites withinClass: (model entityNamed: 'Zork')
>
> http://www.moosetechnology.org/docs/famix/MooseChef
> ;)
>
> Just need to rewrite
> FAMIXMethod>>invokingMethods
>        ^ self queryIncomingInvocations opposites
>
> And you can do
> zorkClass := model entityNamed: 'Zork'.
> (...)
> method invokingMethods withinClass: zorkClass
>
>
>
> >               within: targetMethods.
> >       view interaction menu: #mooseMenu.
> >       view nodes: each methods.
> >       view gridLayout gapSize: 2].
> > view edgesFrom: #superclass.
> > view treeLayout
> >
> > Cheers,
> > Doru
> >
> >
> >>
> >> But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities
> >>
> >>
> >>>
> >>> Laurent.
> >>>
> >>>
> >>>
> >>> Cheers,
> >>> Doru
> >>>
> >>>
> >>> On 20 Apr 2011, at 17:03, laurent laffont wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> In a Java project I have a class - let's call it Zork.
> >>>>
> >>>> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
> >>>>
> >>>> I'm sure it's possible but I'm a Moose newbie :)
> >>>>
> >>>> How can I do it ?
> >>>>
> >>>>
> >>>> Laurent Laffont - @lolgzs
> >>>>
> >>>> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
> >>>> Blog: http://magaloma.blogspot.com/
> >>>> Developer group: http://cara74.seasidehosting.st
> >>>>
> >>>> _______________________________________________
> >>>> Moose-dev mailing list
> >>>> [hidden email]
> >>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >>>
> >>> --
> >>> www.tudorgirba.com
> >>>
> >>> "No matter how many recipes we know, we still value a chef."
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> Moose-dev mailing list
> >>> [hidden email]
> >>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >>>
> >>> _______________________________________________
> >>> Moose-dev mailing list
> >>> [hidden email]
> >>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >>
> >> --
> >> Simon Denier
> >>
> >>
> >>
> >> _______________________________________________
> >> Moose-dev mailing list
> >> [hidden email]
> >> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >
> > --
> > www.tudorgirba.com
> >
> > "Don't give to get. Just give."
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > Moose-dev mailing list
> > [hidden email]
> > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> Simon Denier
>
>
>
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"Reasonable is what we are accustomed with."


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Reply | Threaded
Open this post in threaded view
|

Re: Classes that use the most a class

Tudor Girba
Hi,

On 22 Apr 2011, at 08:57, laurent laffont wrote:

> On Thu, Apr 21, 2011 at 8:33 PM, Tudor Girba <[hidden email]> wrote:
> Hi,
>
> There seem to be two mismatches between what you want and what we gave you.
>
> 1. We started from the group of all classes that you want to visualize, and relied on the name of the special class. You opened the Easel on the class.
>
> 2. Our visualization scripts indeed showed all methods from the class. All you have to do is select those methods that are of interest to you.
>
>
> So, try this:
> - select your class and open it in Mondrian Easel
>
> - execute:
>
> view interaction menu: #mooseMenu.
> view nodes: class mooseModel allModelClasses forEach: [:eachClass |
>        view shape rectangle height: [:method | (method invokedMethods select: [:m | m belongsTo = class]) size].
>        view interaction menu: #mooseMenu.
>        view nodes: (eachClass methods select: [:m | m invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]).
>        view gridLayout gapSize: 2].
> view edgesFrom: #superclass.
> view treeLayout
>
>
>
> Thanks Doru. With your snippet I have some empty (class) squares. So it seems the thing that I want is:
>
> |dependentClasses|
> dependentClasses := (class mooseModel allModelClasses select: [:aClass|
> aClass methods anySatisfy: [:aMethod|
> aMethod invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]]).
>
> view interaction menu: #mooseMenu.
> view nodes: dependentClasses forEach: [:eachClass |
>        view shape rectangle height: [:method | (method invokedMethods select: [:m | m belongsTo = class]) size].
>        view interaction menu: #mooseMenu.
>        view nodes: (eachClass methods select: [:m | m invokedMethods anySatisfy: [:invMethod | invMethod belongsTo = class ]]).
>        view gridLayout gapSize: 2].
> view edgesFrom: #superclass.
> view treeLayout
> The first line looks ugly so maybe there's some methods that do this for free (also there's code duplication with the "view nodes: (eachClass methods ...." line).

:). You can write the dependentClasses as:

dependentClasses := class invokingClasses.


> Now let's go a little further ;)
>
> This script useful for me. So I would like an entry in the Moose code browser menu so when I right-click on a class I can choose "Show users in Mondrian".

Take a look here:
http://www.themoosebook.org/book/internals/mondrian/conventions

> OK, I promise to record a screencast on Moose ;)

One will not be enough :)

Cheers,
Doru



>
> Laurent
>
>
>  
> Cheers,
> Doru
>
>
> On 21 Apr 2011, at 09:34, laurent laffont wrote:
>
> > Thanks for your help but I'm a little lost :)
> >
> > I think I should rephrase my needs.
> >
> >
> > I have the class Bibacarte (this name is real). I open the Moose Code Browser, select this class, right-click Open in Mondrian Easel.
> >
> > So now I have Mondrian opened on class->Bibacarte.
> > class class =>  FAMIXClass
> > class asString =>  'Bibacarte in net::sa::afi::home (Type)'
> > class queryAllIncomingInvocations a MooseIncomingQueryResult(creerAbonne -> #Bibacarte() (Invocation) compare -> #getId() (Invocation) chargerCarte -> #getId() (Invocation) controlerCodeBarre -> #getId() (Invocation) getHistoCarte -> #getId() (Invocation) equals -> #getId() (Invocation)  .......
> > class queryAllIncomingInvocations size => 103
> >
> > It seems #queryAllIncomingInvocations  is the right method that returns all methods that reference Bibacarte
> >
> > I want to group all these invocations per class, and in the visualization the higher the number of invocations is, the bigger is the rectangle.
> >
> > In the class rectangle I want to see the methods that invoke a method on Bibacarte (a rectangle by method - I don't want to see methods that don't invoke a method on Bibacarte). Now the more a method invoke a Bibacarte method, the bigger (or darker) the rectangle is.
> >
> > I'm searching / learning in Moose but that's not a tiny platform :)
> >
> > Laurent.
> >
> >
> >
> > On Wed, Apr 20, 2011 at 11:49 PM, Simon Denier <[hidden email]> wrote:
> >
> > On 20 avr. 2011, at 20:45, Tudor Girba wrote:
> >
> > > Hi,
> > >
> > > On 20 Apr 2011, at 20:19, Simon Denier wrote:
> > >
> > >>
> > >> On 20 avr. 2011, at 17:42, laurent laffont wrote:
> > >>
> > >>> On Wed, Apr 20, 2011 at 5:27 PM, Tudor Girba <[hidden email]> wrote:
> > >>> Hi Laurent,
> > >>>
> > >>> You are getting in the right mode :).
> > >>>
> > >>> - Select the group of classes you want to visualize
> > >>> - Right click and select Open in Mondrian Easel
> > >>> - Add and generate view:
> > >>>
> > >>> view shape rectangle height: [:each | each invokingClasses size].
> > >>> view nodes: classGroup.
> > >>> view edgesFrom: #superclass.
> > >>> view treeLayout
> > >>>
> > >>>
> > >>> hehe, start to look interesting ;)
> > >>>
> > >>> But now in each rectangle (that is a class) I want a rectangle per method which height is also dependent on the number of references on the class Zork.
> > >>>
> > >>> Then I should be able to right-click a method => browse source.
> > >>
> > >>
> > >> view shape rectangle height: [:each | each invokingClasses size].
> > >> view nodes: classGroup forEach: [ :cls |
> > >>      view shape rectangle height: [ :m | m invokingClasses size ].
> > >>      view interaction item: 'browse' action: #browseSource.
> > >>      view nodes: cls methods ].
> > >> view edgesFrom: #superclass.
> > >> view treeLayout
> > >
> > > I think Laurent wanted only specific references to count. Here is a possible script:
> > >
> > > | targetMethods |
> > > targetMethods := classGroup flatCollect: #methods.
> > > view interaction menu: #mooseMenu.
> > > view nodes: classGroup forEach: [:each |
> > >       view shape rectangle
> > >               linearFillColor: [:method |
> > >                       (method invokingMethods select: [:m | m belongsTo name = 'Zork']) size]
> >
> >
> >
> > method queryIncomingInvocations opposites withinClass: (model entityNamed: 'Zork')
> >
> > http://www.moosetechnology.org/docs/famix/MooseChef
> > ;)
> >
> > Just need to rewrite
> > FAMIXMethod>>invokingMethods
> >        ^ self queryIncomingInvocations opposites
> >
> > And you can do
> > zorkClass := model entityNamed: 'Zork'.
> > (...)
> > method invokingMethods withinClass: zorkClass
> >
> >
> >
> > >               within: targetMethods.
> > >       view interaction menu: #mooseMenu.
> > >       view nodes: each methods.
> > >       view gridLayout gapSize: 2].
> > > view edgesFrom: #superclass.
> > > view treeLayout
> > >
> > > Cheers,
> > > Doru
> > >
> > >
> > >>
> > >> But soon you will discover that it's better to use other property (like a linear gradient in fill color) to distinguish some entities
> > >>
> > >>
> > >>>
> > >>> Laurent.
> > >>>
> > >>>
> > >>>
> > >>> Cheers,
> > >>> Doru
> > >>>
> > >>>
> > >>> On 20 Apr 2011, at 17:03, laurent laffont wrote:
> > >>>
> > >>>> Hi,
> > >>>>
> > >>>> In a Java project I have a class - let's call it Zork.
> > >>>>
> > >>>> I want to build a visualization which show which classes and methods use the most this class (for example the bigger the square is the more the method / class uses it).
> > >>>>
> > >>>> I'm sure it's possible but I'm a Moose newbie :)
> > >>>>
> > >>>> How can I do it ?
> > >>>>
> > >>>>
> > >>>> Laurent Laffont - @lolgzs
> > >>>>
> > >>>> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
> > >>>> Blog: http://magaloma.blogspot.com/
> > >>>> Developer group: http://cara74.seasidehosting.st
> > >>>>
> > >>>> _______________________________________________
> > >>>> Moose-dev mailing list
> > >>>> [hidden email]
> > >>>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> > >>>
> > >>> --
> > >>> www.tudorgirba.com
> > >>>
> > >>> "No matter how many recipes we know, we still value a chef."
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> _______________________________________________
> > >>> Moose-dev mailing list
> > >>> [hidden email]
> > >>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> > >>>
> > >>> _______________________________________________
> > >>> Moose-dev mailing list
> > >>> [hidden email]
> > >>> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> > >>
> > >> --
> > >> Simon Denier
> > >>
> > >>
> > >>
> > >> _______________________________________________
> > >> Moose-dev mailing list
> > >> [hidden email]
> > >> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> > >
> > > --
> > > www.tudorgirba.com
> > >
> > > "Don't give to get. Just give."
> > >
> > >
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > Moose-dev mailing list
> > > [hidden email]
> > > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >
> > --
> > Simon Denier
> >
> >
> >
> >
> > _______________________________________________
> > Moose-dev mailing list
> > [hidden email]
> > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
> >
> > _______________________________________________
> > Moose-dev mailing list
> > [hidden email]
> > https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> --
> www.tudorgirba.com
>
> "Reasonable is what we are accustomed with."
>
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev
>
> _______________________________________________
> Moose-dev mailing list
> [hidden email]
> https://www.iam.unibe.ch/mailman/listinfo/moose-dev

--
www.tudorgirba.com

"We can create beautiful models in a vacuum.
But, to get them effective we have to deal with the inconvenience of reality."


_______________________________________________
Moose-dev mailing list
[hidden email]
https://www.iam.unibe.ch/mailman/listinfo/moose-dev