[Seaside] Tree of Seaside classes

Romain Robbes rrobbes at info.unicaen.fr
Thu Sep 16 14:54:08 CEST 2004


On Sep 16, 2004, at 2:30 PM, Damien Cassou wrote:

> >> 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.
>

it is freely downloadable, but you have to register to obtain a cd key 
(just giving your mail adress).
I'll try to build an image with moose, codecrawler and seaside so that 
you can try it if you want.


>
> 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]}
> _______________________________________________
> Seaside mailing list
> Seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/listinfo/seaside
>



More information about the Seaside mailing list