I'm working with an image which has most of the developer packages
loaded from the Package Universe, including Wisker, but no other local
changes except the beginngings of a few new classes for a new project,
and now when I open a Selector Browser (drag Method Finder from the
Tools flap) and, type a selector in the top left pane and press return,
then try to choose an item in the top right pane I get the following
crash, which seems to be the result of a fairly straight forward
programming bug within Wisker itself.
The problem, as far as I can see, is that the
initWithContents:prior:forList:indentLevel: method immediately does
"self initWithContents: anObject asString font: nil emphasis: nil." but
the initWithContents:font:emphasis: method is not expecting its font:
parameter to be nil.
At this point I'm lost. I don't know anything about Wisker's internals
and I can't quite believe that a released version is so broken in this
way.
>From the debugger window cmd-v on the
initWithContents:prior:forList:indentLevel: method shows only one
version, "2002-11-06 12:55:00 dew WhiskerListItemMorph
{initialization}", but there's no change set, perhaps because I was
forced to do "Smalltalk condenseChanges" while loading the many
packages.
One more thing to check -- the version of the method that's assuming its
font: parameter won't be null
(WhiskerListItemMorph(IndentingListItemMorph)>>initWithContents:font:emp
hasis:). Ah ha! It is much newer: "2008-09-15 16:35:00 dr
IndentingListItemMorph {*ob-enhancements}". That's probably the change
which causes this bug, but I'm not sure where it
Damn that condeseChanges!
ACK! An then if I accidentally close the debug window, poof, away go
the details from this message too! Argh! OK, now we start over,
cut&paste from the old message window, and be careful to send this
message before closing any other windows.
19 November 2008 1:59:58 pm
VM: Mac OS - a SmalltalkImage
Image: Squeak3.10.2 [latest update: #7179]
SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/woods/Squeak/Squeak3.10.2-7179-basic
Trusted Dir /Users/woods/Squeak/Squeak3.10.2-7179-basic
Untrusted Dir /Users/woods/Library/Preferences/Squeak/Internet/My Squeak
UndefinedObject(Object)>>doesNotUnderstand: #emphasis:
Receiver: nil
Arguments and temporary variables:
aMessage: emphasis: 0
Receiver's instance variables:
nil
WhiskerListItemMorph(IndentingListItemMorph)>>initWithContents:font:emph
asis:
Receiver: a WhiskerListItemMorph(2143)nil
Arguments and temporary variables:
aString: 'Object'
aFont: nil
emphasisCode: nil
Receiver's instance variables:
bounds: nil
owner: nil
submorphs: nil
fullBounds: nil
color: nil
extension: nil
font: nil
emphasis: nil
contents: nil
hasFocus: nil
indentLevel: nil
isExpanded: nil
complexContents: a ClassInHierarchyWrapper(2136) on Object
firstChild: nil
container: a MultiSelectHierarchicalListMorph(2378)
nextSibling: nil
icon: nil
WhiskerListItemMorph>>initWithContents:prior:forList:indentLevel:
Receiver: a WhiskerListItemMorph(2143)nil
Arguments and temporary variables:
anObject: a ClassInHierarchyWrapper(2136) on Object
priorMorph: nil
hostList: a MultiSelectHierarchicalListMorph(2378)
newLevel: 0
Receiver's instance variables:
bounds: nil
owner: nil
submorphs: nil
fullBounds: nil
color: nil
extension: nil
font: nil
emphasis: nil
contents: nil
hasFocus: nil
indentLevel: nil
isExpanded: nil
complexContents: a ClassInHierarchyWrapper(2136) on Object
firstChild: nil
container: a MultiSelectHierarchicalListMorph(2378)
nextSibling: nil
icon: nil
[] in
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>addMorphs
To:from:allowSorting:withExpandedItems:atLevel: {[:item | priorMorph :=
self indentingItemClass basicNew initWithContent...]}
Arguments and temporary variables:
morphList: an OrderedCollection()
aCollection: an Array(a ClassInHierarchyWrapper(2136) on Object)
sortBoolean: false
expandedItems: #()
newIndent: 0
priorMorph: nil
newCollection: an Array(a ClassInHierarchyWrapper(2136) on Object)
firstAddition: nil
a: nil
b: nil
item: a ClassInHierarchyWrapper(2136) on Object
--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #emphasis:
WhiskerListItemMorph(IndentingListItemMorph)>>initWithContents:font:emph
asis:
WhiskerListItemMorph>>initWithContents:prior:forList:indentLevel:
[] in
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>addMorphs
To:from:allowSorting:withExpandedItems:atLevel: {[:item | priorMorph :=
self indentingItemClass basicNew initWithContent...]}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Array(SequenceableCollection)>>do:
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>addMorphs
To:from:allowSorting:withExpandedItems:atLevel:
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>list:
MultiSelectHierarchicalListMorph>>on:list:selected:changeSelected:menu:k
eystroke:
MultiSelectHierarchicalListMorph class(SimpleHierarchicalListMorph
class)>>on:list:selected:changeSelected:menu:
WhiskerWindow>>addClassHierarchyPane
WhiskerWindow>>initializeFromModel:
WhiskerBrowser>>openAsMorphEditing:
WhiskerBrowser class>>open
WhiskerBrowser class>>openExistingBrowserOnClass:selector:
Browser class>>fullOnClass:selector:
SelectorBrowser>>classListIndex:
PluggableListMorph>>changeModelSelection:
PluggableListMorph>>mouseUp:
PluggableListMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableListMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
PluggableListMorph(Morph)>>processEvent:using:
PluggableListMorph(Morph)>>processEvent:
PluggableListMorph>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self.
ActiveEvent := anEvent. e := anEvent transformedB...]}
[] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]}
BlockContext>>on:do:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
...etc...