Hi All,
I have just found out why some recent images of ours at Teleplace aren't logging doits; the system notifications are missing Smalltalk as a target. If you look at senders of SystemChangeNotifier>>notify:ofAllSystemChangesUsing: in trunk you'll see the following three key senders (ignoring tests)
ChangeSet class>>newChanges: - ensures change sets keep up to date with changes
Preferences class>>registerForEvents - ensures prefs stay up to date when methods with preference method tags get added/removed
Utilities class>>startUp - ensures recent submissions are maintained
SmalltalkImage is conspicuously absent, yet
| | am |
am := (SystemChangeNotifier uniqueInstance instVarNamed: 'eventSource') actionMap.
am keys select:
[:k| | e |
(e := am at: k) isArray
ifTrue: [e anySatisfy: [:seq| seq receiver == Smalltalk]]
ifFalse: [e receiver == Smalltalk]]
#(#protocolRenamedEvent: #methodModifiedEvent: #protocolAddedEvent: #categoryRemovedEvent: #expressionDoItEvent: #methodRemovedEvent: #classReorganizedEvent: #protocolModifiedEvent: #categoryModifiedEvent: #classRenamedEvent: #protocolRemovedEvent: #classRemovedEvent: #classAddedEvent: #categoryRenamedEvent: #classModifiedEvent: #methodRecategorizedEvent: #classCommentedEvent: #methodAddedEvent: #classRecategorizedEvent: #categoryAddedEvent:)
| am |
am := (SystemChangeNotifier uniqueInstance instVarNamed: 'eventSource') actionMap.
am keys reject:
[:k| | e |
(e := am at: k) isArray
ifTrue: [e anySatisfy: [:seq| seq receiver == Smalltalk]]
ifFalse: [e receiver == Smalltalk]]
#(#methodReorganizedEvent: #methodCommentedEvent: #methodDoItEvent: #categoryRecategorizedEvent: #methodRenamedEvent:)
and there's the rub. Why isn't Smalltalk a target of all events? Why does it exclude #methodReorganizedEvent: #methodCommentedEvent: #methodDoItEvent: #categoryRecategorizedEvent: #methodRenamedEvent:? Is this merely accident?
I'm pretty sure that SmalltalkImage class>>startUp needs to ensure system notifications are up-to-date, but are the above exclusions missing for any reason? It's kind of hard to figure out (see below). I *think* that it should read
SmalltalkImage class>>startUp
"XXXX: This is broken. SmalltalkImage startUp happens quite late in the startup sequence; earlier startups may very well need the information about the endianness of the platform."
EndianCache := nil.
SystemChangeNotifier uniqueInstance notify: Smalltalk ofAllSystemChangesUsing: #event:
but I thought I'd check with y'all.
and finally when can we reimplement this entire mess using e.g. Anouncements, I mean:
AbstractEvent>>eventSelector
^self class eventSelectorBlock value: itemKind value: self changeKind
AbstractEvent class>>eventSelectorBlock
^[:itemKind :changeKind | itemKind, changeKind, 'Event:']
Surely this is too direct and easy to understand ;) I mean who /needs/ senders and implementors to work?
grrr....
Eliot