[Seaside] Tree of Seaside classes
Damien Cassou
damien.cassou at laposte.net
Thu Sep 16 14:30:26 CEST 2004
>> I want to comment Seaside's classes and methods. Does a graphical tree
>> of the classes exists (which show the hierarchy between classes) ? If
>> not, is it possible to generate one from squeak easily ?
>>
> You could try this, which does class diagrams based on dynamical
> information :
>
> http://minnow.cc.gatech.edu/squeak/3577
This program has a bug that prevents me from using it. The bug report is
below.
> The other possibility (which might need some more time) would be to
> use Seaside's ports on visualworks,
> and use Moose and CodeCrawler to have an in-depth analysis of the code.
> (see http://www.iam.unibe.ch/~scg/Research/CodeCrawler/ ) (if I had some
> time, I might have a look at it myself ...)
>
I do not have VisualWorls, but I can try to download it if it is freely
downloadable.
P.S. I've CCed the developper of ClassDiagram
Here is the bug report :
16 September 2004 2:23:13 pm
VM: unix - a SmalltalkImage
Image: Squeak3.7 [latest update: #5989]
SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/quetzalcoatl/squeak-3.7/squeak-bak
Trusted Dir /home/quetzalcoatl/squeak-3.7/squeak-bak/secure
Untrusted Dir /home/quetzalcoatl/squeak-3.7/squeak-bak/untrusted
CDClassMorph class(Object)>>doesNotUnderstand: #newUMLClassSymbol
Receiver: CDClassMorph
Arguments and temporary variables:
aMessage: newUMLClassSymbol
Receiver's instance variables:
superclass: ProtoObject
methodDict: a MethodDictionary(#addYellowButtonMenuItemsTo:event:->a
CompiledMe...etc...
format: 134
instanceVariables: #('classDiagramUI' 'cdClass')
organization: ('accessing' shownClass)
('initialize-release' initialize initial...etc...
subclasses: nil
name: #CDClassMorph
classPool: nil
sharedPools: nil
environment: a SystemDictionary(lots of globals)
category: nil
CDClassMorph class>>classDiagramUI:class:
Receiver: CDClassMorph
Arguments and temporary variables:
aClassDiagramUI: a CDClassDiagramUI(843)
aCDClass: aCDClass:WAAnswerHandler
Receiver's instance variables:
superclass: ProtoObject
methodDict: a MethodDictionary(#addYellowButtonMenuItemsTo:event:->a
CompiledMe...etc...
format: 134
instanceVariables: #('classDiagramUI' 'cdClass')
organization: ('accessing' shownClass)
('initialize-release' initialize initial...etc...
subclasses: nil
name: #CDClassMorph
classPool: nil
sharedPools: nil
environment: a SystemDictionary(lots of globals)
category: nil
[] in CDClassDiagramUI>>morphForClass: {[classMorph := CDClassMorph
classDiagramUI: self class: aCDClass. classMorp...]}
Arguments and temporary variables:
aCDClass: aCDClass:WAAnswerHandler
classMorph: nil
each: nil
OrderedCollection(Collection)>>detect:ifNone:
Receiver: an OrderedCollection()
Arguments and temporary variables:
aBlock: [] in CDClassDiagramUI>>morphForClass: {[:each | each
shownClass = aCDC...etc...
exceptionBlock: [] in CDClassDiagramUI>>morphForClass: {[classMorph
:= CDClassM...etc...
each: nil
Receiver's instance variables:
array: #(nil nil nil nil nil nil nil nil nil nil)
firstIndex: 3
lastIndex: 2
--- The full stack ---
CDClassMorph class(Object)>>doesNotUnderstand: #newUMLClassSymbol
CDClassMorph class>>classDiagramUI:class:
[] in CDClassDiagramUI>>morphForClass: {[classMorph := CDClassMorph
classDiagramUI: self class: aCDClass. classMorp...]}
OrderedCollection(Collection)>>detect:ifNone:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CDClassDiagramUI>>morphForClass:
CDClassDiagramUI>>drawClass:
[] in CDClassDiagramUI>>draw {[:each | self drawClass: each]}
OrderedCollection>>do:
CDClassDiagramUI>>draw
CDClassDiagramUI>>update:
[] in CDClassDiagram(Object)>>changed: {[:aDependent | aDependent
update: aParameter]}
DependentsArray>>do:
CDClassDiagram(Object)>>changed:
CDClassDiagram>>addClassCategoryNamed:
CDClassDiagramWindow>>addClassCategory:
CDClassDiagramWindow>>addClassCategory
PluggableButtonMorph>>performAction
[] in PluggableButtonMorph>>mouseUp: {[:m | (m containsPoint: evt
cursorPoint) ifTrue: [m performAction]]}
Array(SequenceableCollection)>>do:
PluggableButtonMorph>>mouseUp:
PluggableButtonMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableButtonMorph(Morph)>>handleEvent:
PluggableButtonMorph(Morph)>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self.
ActiveEvent := anEvent. result := focusHolder han...]}
[] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]}
BlockContext>>on:do:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h
processEvents. capturingGesture := capturingGest...]}
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess {[[World doOneCycle. Processor
yield. false] whileFalse. nil]}
[] in BlockContext>>newProcess {[self value. Processor
terminateActive]}
More information about the Seaside
mailing list