[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