Following up discussion on the Catalog sometimes delaying Spotter in
locations with poor network
http://forum.world.st/Catalog-loading-in-Spotter-td4934969.html#a4935842

Just sharing a poke I had at understanding the name resolution call chain
down to the primitives.
Attached is a Roassal/Artefact generated PDF based on "methods" and "links"
from this...

methods := NetNameResolver class methods select: [:m | m selector
beginsWith: 'prim']. "start with primitives"
methods := methods asSet.
prevMethods := #() asSet.
links := Set new.
3 timesRepeat: [
|newMethods todo|
newMethods := methods difference: prevMethods.
prevMethods := methods copy.
todo := newMethods collect: [:m|
|senders|
((((m methodClass inheritsFrom: TestAsserter)
or: [m selector = #new])
or: [m methodClass printString beginsWith: 'SmaCC'])
or: [m selector printString beginsWith: '#init'])
ifTrue: [m -> #()]
ifFalse: [m -> (m senders collect: [:rgmd| rgmd compiledMethod])].
].
todo := todo select: [:sendersOf| sendersOf value size > 0]. "remove fluff"
todo := todo sorted: [:sendersOf1 :sendersOf2| sendersOf1 value size >
sendersOf2 value size]. "helps debugging"
todo do: [:sendersOf|
sendersOf value do: [:sender|
methods add: sender.
links add: (sender->sendersOf key).
]
].
].
methods copy do: [:m| links detect: [:l| (m = l key) or: [ m = l value] ]
ifNone: [ methods remove: m]]. "remove fluff"



After loading Roassal from the Catalog into 60411
I started with Mondrian to graph like this...

b := RTMondrian new.
b shape box.
b nodes: methods forEach: [:each|
b shape
withText: [:m| m methodClass printString, String cr, m selector
printString];
withTextColor: Color black.
b nodes: { each }.
b layout
].
b shape arrowedLine withShorterDistanceAttachPoint.
links do: [:l| b edges connectFrom: l value to: l key].
b layout horizontalDominanceTree horizontalGap: 100.
b build.
b view inspect

But I wanted to fine tune the layout by moving around a few subtrees
and couldn't work out how to add RTDraggableChildren to the Mondrian edges.

So I tried Roassal direct like this...
    v := RTView new.
    v @ RTDraggableView.
    labelTemplate := (RTLabel new text: [:m | m methodClass printString,
String cr, m selector printString]).

    els := labelTemplate elementsOn: methods. "also see alternative below"
    v addAll: els.
    eb := RTEdgeBuilder new
view: v;
  elements: els.

    links do: [:l| eb connectFrom: l value to: l key].
    RTHorizontalDominanceTreeLayout  on: els.
    els @ RTDraggableChildren.
    v inspect.

But couldn't work out how to put a border around the RTLabel, nor change
its background colour.
I saw RTShape>>#fillColor: and #fillColorElement: but couldn't determine
how to make use of them.

The best I could come up with is the following alternative that replaces
the code in the middle that assigns "els" and "eb" with...
   els := RTBox elementsOn: methods.
   v addAll: els.
   RTNest new
for: els
add: [ :group :method |
group
addAll: (labelTemplate elementsOn: {method})].
   eb := RTEdgeBuilder new
view: v;
elements: els.

cheers -ben

Attachment: NetNameResolver-3level-primitive-senders.pdf
Description: Adobe PDF document

Reply via email to