[squeak-dev] The Trunk: System-mt.1246.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Nov 18 15:58:24 UTC 2021
Marcel Taeumel uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-mt.1246.mcz
==================== Summary ====================
Name: System-mt.1246
Author: mt
Time: 18 November 2021, 4:58:20.988305 pm
UUID: 836f218d-5bda-5146-a978-5f6072893f80
Ancestors: System-eem.1245, System-ct.1221
Merges System-ct.1221.
Extracts confirm-and-remove actions from Tools (e.g., Browser, Debugger, MessageSet) to SystemNavigation to
- remove code duplication
- reduce concept scattering
- clarify the variations in tools themselves.
See Browser >> #removeClass as an example.
=============== Diff against System-eem.1245 ===============
Item was added:
+ ----- Method: SystemNavigation>>confirmAndRemoveClass: (in category 'ui') -----
+ confirmAndRemoveClass: aClass
+
+ | allCalls subclasses hasForeignCalls className numberOfMethods allChoices yourChoice remove browse|
+ allCalls := self allCallsOnClass: aClass.
+ subclasses := aClass subclasses.
+ hasForeignCalls := allCalls anySatisfy: [:ea | ea actualClass ~= aClass].
+
+ className := aClass name.
+ numberOfMethods := aClass methodDict size + aClass class methodDict size.
+
+ allChoices := OrderedDictionary new.
+ allChoices at: 'Yes, remove it' translated put: [remove := true. browse := false].
+ (allCalls notEmpty or: [subclasses notEmpty]) ifTrue: [
+ allChoices at: 'Yes, remove it, then browse references' translated put: [remove := true. browse := true].
+ allChoices at: 'No, don''t remove it, but browse references' translated put: [remove := false. browse := true]].
+ allChoices at: 'No, don''t remove it' translated put: [remove := false. browse := false].
+
+ yourChoice := Project uiManager
+ chooseFromLabeledValues: allChoices
+ title: ('Are you sure that you want to remove\the class\\ {1}\\and all its {2} methods? Maybe save\your image before doing this.{3}{4}' translated withCRs asText format: {
+ className asText allBold.
+ numberOfMethods asString asText allBold.
+ hasForeignCalls ifFalse: [''] ifTrue: [
+ '\\(There are {1} references to this class.)' translated withCRs asText
+ format: { allCalls size asString asText allBold }].
+ subclasses ifEmpty: [''] ifNotEmpty: [
+ '\\(There are {1} subclasses, whose superclass\must be updated manually after this.)' translated withCRs asText
+ format: { subclasses size asString asText allBold }] }).
+
+ remove := browse := false. "Defaults"
+ yourChoice value. "Supports nil because of defaults above."
+
+ remove ifTrue: [
+ aClass removeFromSystem].
+ browse ifTrue: [
+ hasForeignCalls ifTrue: [
+ self browseAllCallsOnClass: aClass].
+ subclasses ifNotEmpty: [
+ self
+ browseMessageList: (subclasses collect: [:subclass | MethodReference class: subclass selector: #Definition environment: self environment])
+ name: ('Subclasses of {1}' translated format: {className})
+ autoSelect: className]].
+
+ ^ remove!
Item was added:
+ ----- Method: SystemNavigation>>confirmAndRemoveMessageCategory:class: (in category 'ui') -----
+ confirmAndRemoveMessageCategory: aCategory class: aClass
+
+ | categoryList |
+ categoryList := aClass organization listAtCategoryNamed: aCategory.
+
+ (categoryList isEmpty
+ or: [Project uiManager confirm: ('Are you sure you want to remove\the message category\\ {1}\ from {2}\\and all its {3} methods? Maybe save\your image before doing this.' translated withCRs asText format: {
+ aCategory asText allBold.
+ aClass name.
+ categoryList size asString asText allBold
+
+ }) title: 'Remove Message Category' translated])
+ ifFalse: [^ false].
+
+ aClass removeCategory: aCategory.
+ ^ true!
Item was added:
+ ----- Method: SystemNavigation>>confirmAndRemoveSelector:class: (in category 'ui') -----
+ confirmAndRemoveSelector: selector class: aClass
+
+ | method allCalls remove browse |
+ method := MethodReference class: aClass selector: selector environment: self environment.
+ allCalls := self allCallsOn: selector.
+
+ (allCalls anySatisfy: [:ea | ea ~= method])
+ ifFalse: [remove := true. browse := false]
+ ifTrue: [ | allChoices yourChoice |
+
+ allChoices := OrderedDictionary new.
+ allChoices at: 'Yes, remove it' translated put: [remove := true. browse := false].
+ allChoices at: 'Yes, remove it, then browse senders' translated put: [remove := true. browse := true].
+ allChoices at: 'No, don''t remove it, but browse senders' translated put: [remove := false. browse := true].
+ allChoices at: 'No, don''t remove it' translated put: [remove := false. browse := false].
+
+ yourChoice := Project uiManager
+ chooseFromLabeledValues: allChoices
+ title: ('Are you sure that you want to remove the message\{1} from {2}?\\The message has {3} senders.' withCRs translated asText format: {
+ selector asText allBold.
+ aClass name asText allBold.
+ allCalls size asString asText allBold }).
+
+ remove := browse := false. "Defaults"
+ yourChoice value. "Supports nil because of defaults above."].
+
+ remove ifTrue: [
+ aClass removeSelector: selector].
+ browse ifTrue: [
+ self headingAndAutoselectForLiteral: selector do: [ :label :autoSelect |
+ self
+ browseMessageList: allCalls
+ name: label
+ autoSelect: autoSelect]].
+
+ ^ remove!
Item was added:
+ ----- Method: SystemNavigation>>confirmAndRemoveSystemCategory: (in category 'ui') -----
+ confirmAndRemoveSystemCategory: aCategory
+
+ | systemOrganizer categoryList |
+ systemOrganizer := self environment organization.
+ categoryList := systemOrganizer listAtCategoryNamed: aCategory.
+
+ (categoryList isEmpty
+ or: [Project uiManager
+ confirm: ('Are you sure you want to remove\the system category\\ {1}\\and all its {2} classes? Maybe save\your image before doing this.' translated withCRs asText
+ format: {
+ aCategory asText allBold.
+ categoryList size asString asText allBold})
+ title: 'Remove System Category' translated])
+ ifFalse: [^ false].
+ systemOrganizer removeSystemCategory: aCategory.
+ ^ true!
Item was removed:
- ----- Method: SystemNavigation>>confirmRemovalOf:on: (in category 'ui') -----
- confirmRemovalOf: aSelector on: aClass
- "Determine if it is okay to remove the given selector. Answer 1 if it
- should be removed, 2 if it should be removed followed by a senders
- browse, and 3 if it should not be removed."
- | count answer caption allCalls |
- allCalls := self allCallsOn: aSelector.
- (count := allCalls size) = 0
- ifTrue: [^ 1].
- "no senders -- let the removal happen without warning"
- count = 1
- ifTrue: [(allCalls first actualClass == aClass
- and: [allCalls first methodSymbol == aSelector])
- ifTrue: [^ 1]].
- "only sender is itself"
- caption := 'The message "{1}" has {2} sender{3}.' translated format: {aSelector. count. count > 1 ifTrue: ['s'] ifFalse: ['']}.
-
- answer := UIManager default
- chooseFrom: #('Remove it'
- 'Remove, then browse senders'
- 'Don''t remove, but show me those senders'
- 'Forget it -- do nothing -- sorry I asked') title: caption.
- answer = 3
- ifTrue: [self
- browseMessageList: allCalls
- name: 'Senders of ' , aSelector
- autoSelect: aSelector keywords first].
- answer = 0
- ifTrue: [answer := 3].
- "If user didn't answer, treat it as cancel"
- ^ answer min: 3!
More information about the Squeak-dev
mailing list
|