A new version of System was added to project The Inbox: http://source.squeak.org/inbox/System-ct.1246.mcz
==================== Summary ====================
Name: System-ct.1246 Author: ct Time: 1 November 2021, 10:02:52.192754 pm UUID: 1a72b404-61d8-d04c-8323-6a94bceb2230 Ancestors: System-eem.1244
Avoids dangling preferences when removing the preference pragma from a method.
The disadvantage of this approach is that the lifecycle of the preference is reset whenever it is recompiled. However, I am not aware of any disadvantage of this change.
=============== Diff against System-eem.1244 ===============
Item was changed: ----- Method: Preferences class>>prefEvent: (in category 'updating') ----- prefEvent: anEvent "Check if this system event defines or removes a preference."
| class selector method | self flag: #performance. "mt: Maybe defer preference dictionary update?"
anEvent itemKind = SystemChangeNotifier classKind ifTrue: [ anEvent isRemoved ifTrue: [ self removeAllPreferencesSuchThat: [:pref | pref provider == anEvent item]]. anEvent isRenamed ifTrue: [ self atomicUpdatePreferences: [ :prefs | self allPreferences select: [:pref | pref provider == anEvent item] thenDo: [:pref | prefs at: pref id put: pref]. prefs keys select: [:id | id beginsWith: anEvent oldName] thenDo: [:id | prefs removeKey: id] ] ] ]. anEvent itemKind = SystemChangeNotifier methodKind ifTrue: [ "ignore instance methods" anEvent itemClass isMeta ifFalse: [^ self]. + - class := anEvent itemClass theNonMetaClass. selector := anEvent itemSelector. method := anEvent item. + + self atomicUpdatePreferences: [ :prefs | + "See PragmaPreference >> #id." + prefs removeKey: (class name,'>>', selector) asSymbol ifAbsent: []] . + - - anEvent isRemoved ifTrue: [ - self atomicUpdatePreferences: [ :prefs | - "See PragmaPreference >> #id." - prefs removeKey: (class name,'>>', selector) asSymbol ifAbsent: []]]. - (anEvent isAdded or: [anEvent isModified]) ifTrue: [ method pragmas do: [:pragma | self addPragmaPreference: pragma] ] ].!
squeak-dev@lists.squeakfoundation.org