[squeak-dev] The Trunk: Tools-mt.894.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Sep 26 09:51:49 UTC 2019
Marcel Taeumel uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-mt.894.mcz
==================== Summary ====================
Name: Tools-mt.894
Author: mt
Time: 26 September 2019, 11:51:47.732232 am
UUID: 49cc71d2-c009-b546-a310-b7bc31cd2eb0
Ancestors: Tools-mt.893
Fixes recent regression with "create" button in debugger notifier. Cleans up message categories to make the notifier functionality more clear.
=============== Diff against Tools-mt.893 ===============
Item was changed:
+ ----- Method: Debugger>>askForCategoryIn:default: (in category 'notifier support') -----
- ----- Method: Debugger>>askForCategoryIn:default: (in category 'context stack menu') -----
askForCategoryIn: aClass default: aString
| categories index category |
categories := OrderedCollection with: 'new ...'.
categories addAll: (aClass allMethodCategoriesIntegratedThrough: Object).
index := UIManager default
chooseFrom: categories
title: 'Please provide a good category for the new method!!' translated.
index = 0 ifTrue: [^ aString].
category := index = 1 ifTrue: [UIManager default request: 'Enter category name:']
ifFalse: [categories at: index].
^ category isEmpty ifTrue: [^ aString] ifFalse: [category]!
Item was changed:
+ ----- Method: Debugger>>askForSuperclassOf:toImplement:ifCancel: (in category 'notifier support') -----
- ----- Method: Debugger>>askForSuperclassOf:toImplement:ifCancel: (in category 'private') -----
askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock
| classes chosenClassIndex |
classes := aClass withAllSuperclasses.
chosenClassIndex := UIManager default
chooseFrom: (classes collect: [:c | c name])
title: 'Define #', aSelector, ' in which class?'.
chosenClassIndex = 0 ifTrue: [^ cancelBlock value].
^ classes at: chosenClassIndex!
Item was changed:
+ ----- Method: Debugger>>askForSuperclassOf:upTo:toImplement:ifCancel: (in category 'notifier support') -----
- ----- Method: Debugger>>askForSuperclassOf:upTo:toImplement:ifCancel: (in category 'private') -----
askForSuperclassOf: aClass upTo: superclass toImplement: aSelector ifCancel: cancelBlock
| classes chosenClassIndex |
classes := aClass withAllSuperclasses reject: [:cls | aClass isKindOf: cls].
chosenClassIndex := UIManager default
chooseFrom: (classes collect: [:c | c name])
title: 'Define #', aSelector, ' in which class?'.
chosenClassIndex = 0 ifTrue: [^ cancelBlock value].
^ classes at: chosenClassIndex!
Item was changed:
+ ----- Method: Debugger>>contextStackIndex (in category 'context stack - message list') -----
- ----- Method: Debugger>>contextStackIndex (in category 'context stack (message list)') -----
contextStackIndex
"Answer the index of the selected context."
^contextStackIndex!
Item was changed:
+ ----- Method: Debugger>>contextStackList (in category 'context stack - message list') -----
- ----- Method: Debugger>>contextStackList (in category 'context stack (message list)') -----
contextStackList
"Answer the array of contexts."
^contextStackList!
Item was changed:
+ ----- Method: Debugger>>createImplementingMethod (in category 'notifier buttons') -----
- ----- Method: Debugger>>createImplementingMethod (in category 'private') -----
createImplementingMethod
"Should only be called when this Debugger was created in response to a
NotYetImplemented exception. All we need to do is pop the signalling context off the stack and open the #notYetImplemented method."
| signallingContext |
+ self initializeFull.
signallingContext := self selectedContext sender.
"Pop the signalling context off the stack"
self resetContext: signallingContext.
self debug.!
Item was changed:
+ ----- Method: Debugger>>createMethod (in category 'notifier buttons') -----
- ----- Method: Debugger>>createMethod (in category 'private') -----
createMethod
"Should only be called when this Debugger was created in response to a
MessageNotUnderstood exception. Create a stub for the method that was
missing and proceed into it."
| msg chosenClass |
+ self initializeFull.
msg := self contextStackTop exceptionMessage.
chosenClass := self
askForSuperclassOf: self contextStackTop receiver class
toImplement: msg selector
ifCancel: [^self].
self implementMissingMethod: msg inClass: chosenClass.!
Item was changed:
+ ----- Method: Debugger>>createOverridingMethod (in category 'notifier buttons') -----
- ----- Method: Debugger>>createOverridingMethod (in category 'private') -----
createOverridingMethod
"Should only be called when this Debugger was created in response to a
SubclassResponsibility exception. Create a stub for the method that needs
overriding and proceed into it. Let the user only select a class in the
inheritance chain between the actual class and the class declaring the
subclassResponsibility."
| chosenClass msg category |
+ self initializeFull.
msg := self contextStackTop exceptionMessage.
chosenClass := self
askForSuperclassOf: self contextStackTop receiver class
upTo: self contextStackTop sender method methodClass
toImplement: msg selector
ifCancel: [^self].
"Use the same category as the marker method."
category := self contextStackTop sender selectorCategory.
self implementOverridingMethod: msg inClass: chosenClass inCategory: category.!
Item was changed:
+ ----- Method: Debugger>>debugAt: (in category 'notifier buttons') -----
- ----- Method: Debugger>>debugAt: (in category 'initialize') -----
debugAt: anInteger
"Opens a full debugger with the given index selected. See #initializeFull to understand why contextStackIndex is set directly."
contextStackIndex := anInteger.
^ self debug!
Item was changed:
+ ----- Method: Debugger>>expandNotifierStack (in category 'context stack - message list') -----
- ----- Method: Debugger>>expandNotifierStack (in category 'context stack (message list)') -----
expandNotifierStack
"Show a small amount of stack in the context pane. Useful for notifiers."
self okToChange ifFalse: [^ self].
self newStack: (self contextStackTop stackOfSize: self class notifierStackSize).
self changed: #contextStackList.
!
Item was changed:
+ ----- Method: Debugger>>expandStack (in category 'context stack - message list') -----
- ----- Method: Debugger>>expandStack (in category 'context stack (message list)') -----
expandStack
"Show a substantial amount of stack in the context pane."
self okToChange ifFalse: [^ self].
self newStack: (self contextStackTop stackOfSize: self class fullStackSize).
self changed: #contextStackList.
!
Item was changed:
+ ----- Method: Debugger>>fullyExpandStack (in category 'context stack - message list') -----
- ----- Method: Debugger>>fullyExpandStack (in category 'context stack (message list)') -----
fullyExpandStack
"Expand the stack to include all of it. Well, almost all of it, we better maintain sane limits too."
self okToChange ifFalse: [^ self].
self newStack: (self contextStackTop stackOfSize: self class stackSizeLimit - contextStack size).
self changed: #contextStackList.!
Item was changed:
+ ----- Method: Debugger>>implementMissingMethod:inClass: (in category 'notifier support') -----
- ----- Method: Debugger>>implementMissingMethod:inClass: (in category 'context stack menu') -----
implementMissingMethod: aMessage inClass: aClass
^ self
implementMissingMethod: aMessage
inClass: aClass
inCategory: (self askForCategoryIn: aClass default: 'as yet unclassified').!
Item was changed:
+ ----- Method: Debugger>>implementMissingMethod:inClass:inCategory: (in category 'notifier support') -----
- ----- Method: Debugger>>implementMissingMethod:inClass:inCategory: (in category 'context stack menu') -----
implementMissingMethod: aMessage inClass: aClass inCategory: aSymbol
"Create a stub implementation of the missing message and sew it onto the top of the stack, ensuring the context's arguments are set correctly. Debug the new context."
self pushStubMethodOnStack: aMessage inClass: aClass inCategory: aSymbol.
"Cut out the sender context. This is the context that signalled the MessageNotUnderstood."
self selectedContext privSender: self selectedContext sender.
self resetContext: self selectedContext.
self debug.!
Item was changed:
+ ----- Method: Debugger>>implementOverridingMethod:inClass:inCategory: (in category 'notifier support') -----
- ----- Method: Debugger>>implementOverridingMethod:inClass:inCategory: (in category 'context stack menu') -----
implementOverridingMethod: aMessage inClass: aClass inCategory: aSymbol
"Create a stub implementation of the overriding message and sew it onto the top of the stack, ensuring the context's arguments are set correctly. Debug the new context."
self pushStubMethodOnStack: aMessage inClass: aClass inCategory: aSymbol.
"Cut out the sender context. This is the context that signalled the SubclassResponsibility."
self selectedContext privSender: self selectedContext sender sender.
self resetContext: self selectedContext.
self debug.!
Item was changed:
+ ----- Method: Debugger>>messageHelpAt: (in category 'context stack - message list') -----
- ----- Method: Debugger>>messageHelpAt: (in category 'context stack (message list)') -----
messageHelpAt: anIndex
"Show the first n lines of the sources code of the selected message."
| method |
Preferences balloonHelpInMessageLists ifFalse: [^ nil].
contextStack size < anIndex ifTrue: [^ nil].
method := (contextStack at: anIndex) method.
^ self messageHelpForMethod: method.!
Item was changed:
+ ----- Method: Debugger>>messageIconAt: (in category 'context stack - message list') -----
- ----- Method: Debugger>>messageIconAt: (in category 'context stack (message list)') -----
messageIconAt: anIndex
Browser showMessageIcons
ifFalse: [^ nil].
^ ToolIcons iconNamed: (ToolIcons
iconForClass: (contextStack at: anIndex) method methodClass
selector: (contextStack at: anIndex) method selector)!
Item was changed:
+ ----- Method: Debugger>>messageListIndex (in category 'context stack - message list') -----
- ----- Method: Debugger>>messageListIndex (in category 'context stack (message list)') -----
messageListIndex
"Answer the index of the currently selected context."
^contextStackIndex!
Item was removed:
- ----- Method: Debugger>>populateImplementInMenu: (in category 'context stack menu') -----
- populateImplementInMenu: aMenu
-
- | msg |
- msg := self selectedContext at: 1.
- self selectedContext receiver class withAllSuperclasses do:
- [:each |
- aMenu add: each name target: self selector: #implementMissingMethod:inClass: argumentList: (Array with: msg with: each)].
- ^ aMenu
-
- !
Item was changed:
+ ----- Method: Debugger>>selectedMessage (in category 'context stack - message list') -----
- ----- Method: Debugger>>selectedMessage (in category 'context stack (message list)') -----
selectedMessage
"Answer the source code of the currently selected context."
| aContext |
^contents := (aContext := self selectedContext) debuggerMap sourceText asText makeSelectorBoldIn: aContext home receiver class!
Item was changed:
+ ----- Method: Debugger>>selectedMessageName (in category 'context stack - message list') -----
- ----- Method: Debugger>>selectedMessageName (in category 'context stack (message list)') -----
selectedMessageName
"Answer the message selector of the currently selected context.
If the method is unbound we can still usefully answer its old selector."
| selector |
selector := self selectedContext selector.
^(selector ~~ self selectedContext method selector
and: [selector beginsWith: 'DoIt'])
ifTrue: [self selectedContext method selector]
ifFalse: [selector]!
Item was changed:
+ ----- Method: Debugger>>toggleContextStackIndex: (in category 'context stack - message list') -----
- ----- Method: Debugger>>toggleContextStackIndex: (in category 'context stack (message list)') -----
toggleContextStackIndex: anInteger
"If anInteger is the same as the index of the selected context, deselect it.
Otherwise, the context whose index is anInteger becomes the selected
context."
self contextStackIndex:
(contextStackIndex = anInteger
ifTrue: [0]
ifFalse: [anInteger])
oldContextWas:
(contextStackIndex = 0
ifTrue: [nil]
ifFalse: [contextStack at: contextStackIndex])!
More information about the Squeak-dev
mailing list
|