to show the
<<creates>> relationships in the AbstractFactory example.
I had some trouble with RTMondrian and custom composite shapes. I wasn't
able to set the colors of the individual elements in the RTCompositeShape
that I passed for the nodes. I tried working around it with @RTLabeled, but
it prints an "X" where the Character cr is in the string (rather than
wrapping). Finally it kind of works with border/fill/textColor: on the
RTMondrian shape, but it's not what I expected.
============================
"blocks for readability"
findCreators := [ :class | | findConstructors creators |
findConstructors := [
:cclass | cclass methods select: [ :m | m kind = 'constructor']
].
creators := Set new.
(findConstructors value: class) do: [
:method | method incomingInvocations do: [
:ii | creators add: ii sender parentType ]
].
creators. ].
newLine := Character cr asString.
camelWrap := [ :class |
rex := '([a-z])([A-Z])' asRegex.
rex copy: class name translatingMatchesUsing:
[ :each | (each at:1) asString, newLine, (each at:2) asString ]
].
classes := MooseModel root allModels first allClasses select: [
:c | c mooseName beginsWith: 'headfirst::designpatterns::factory::pizzaaf'].
thinArrow := RTDecoratedLine new
head: (RTFilledNarrowArrow asHead);
attachPoint: (RTBorderAttachPoint new);
width: 2.
"inheritanceArrow := RTDecoratedLine new
head: (RTEmptyNarrowArrow asHead);
attachPoint: (RTBorderAttachPoint new);
width: 2."
myClassShape := RTCompositeShape new
add: (RTBox new);
add: (RTLabel new text:camelWrap);
allOfSameSizeWithPadding.
b := RTMondrian new.
b shape shape: myClassShape;
borderColor: Color black;
fillColor: Color paleYellow;
textColor: Color black.
b nodes: classes.
b shape shape: thinArrow;
color: Color veryLightGray.
b edges moveBehind; connectFromAll: findCreators.
"b shape shape: inheritanceArrow;
color: Color green; withShorterDistanceAttachPoint.
b edges connectToAll: #directSuperclasses."
b layout dominanceTree verticalGap: 80; horizontalGap: 5.
b build.
b view @ RTZoomableView.
^ b
=======================================
Adding inheritance to the tree is commented out, but it makes for a mess
when laying out both creation and dependency.
I had wanted to use RTUMLClassBuilder to show the <<creates>> relations,
but finally I gave up since it appears to have inheritance only hard-coded
in the edges. I remember someone saying it should/would be re-done with
RTEdgeBuilder, so I'm looking forward to that.
Another suggestion for RTUMLClassBuilder would be a message forMooseClasses
(at least with Java in Moose, maybe forMooseJavaClasses?) message that has
these values:
forMooseClasses
self classname: #name.
self instanceVariables: #attributes.
self methodsNames: #methods.
self superclass: #superclass.
self methodselector: #signature. self attributeselector: #name
It yields something like this which is nice:
Hope this feedback is useful.
Cheers,
C. Fuhrman
On Sun, Apr 1, 2018 at 1:18 AM, Tudor Girba <tudor(a)tudorgirba.com> wrote:
+1
Doru
On Apr 1, 2018, at 5:58 AM, Cris Fuhrman
<fuhrmanator(a)gmail.com> wrote:
Hi Nicolas,
Thanks - indeed, iterating over Moose class methods with
... methods select: [:m | m kind = 'constructor']
finds all the constructors pretty easily (parentType to find createe).
Then
it's the incomingInvocations' sender parentType to find the creators.
Cheers!
On Fri, Mar 30, 2018 at 3:15 AM, Nicolas Anquetil <
nicolas.anquetil(a)inria.fr> wrote:
Hi,
no there is nothing special for <<create>>.
"Creation" actually seems something different than the associations you
list: Access, Invocation, Inheritance and Reference can be lexically
extracted from the source code and they are fundamental mechanisms of many
programming languages.
But it should not be too difficult to model it in Famix and post-process
a model
to discover all occurences
cheers
nicolas
On 29/03/2018 23:25, Cris Fuhrman wrote:
> Hi all -- I'm not sure if I missed it, but does Moose explicitly model
the
<<creates>> relationship of UML between two classes, e.g.,
ta-models I found Entity -> SourcedEntity -> Association -> {Access,
Invocation, Inheritance, Reference}. In Moose, I can see
outgoingInvocations on methods of a class contain "new X" for all the X
that a class creates, but I wondered if there's a more efficient way.
Cheers!
______________________________
_________________
Moose-dev mailing list
Moose-dev(a)list.inf.unibe.ch
https://www.list.inf.unibe.ch/listinfo/moose-dev
--
Nicolas Anquetil
RMod team -- Inria Lille
_______________________________________________
Moose-dev mailing list
Moose-dev(a)list.inf.unibe.ch
https://www.list.inf.unibe.ch/listinfo/moose-dev
_______________________________________________
Moose-dev mailing list
Moose-dev(a)list.inf.unibe.ch
https://www.list.inf.unibe.ch/listinfo/moose-dev
--
www.tudorgirba.com
www.feenk.com
“Programming is executable philosophy."
_______________________________________________
Moose-dev mailing list
Moose-dev(a)list.inf.unibe.ch
https://www.list.inf.unibe.ch/listinfo/moose-dev