A new version of Tools was added to project The Inbox:
http://source.squeak.org/inbox/Tools-ct.915.mcz ==================== Summary ==================== Name: Tools-ct.915 Author: ct Time: 15 November 2019, 5:30:02.890005 pm UUID: 326d55bd-8463-7e43-a517-e934932fb3a9 Ancestors: Tools-mt.914 Refactor ProcessBrowser nil checks again and move them into #stackListKey:from:. Also, use #browseMethod: in #browseContext to ensure the right version is browsed Thanks to Marcel for the review! =============== Diff against Tools-mt.914 =============== Item was changed: ----- Method: ProcessBrowser>>browseContext (in category 'stack list') ----- browseContext + ToolSet browseMethod: selectedContext method! - selectedContext - ifNil: [^ self]. - ToolSet browse: self selectedClass selector: self selectedSelector! Item was changed: ----- Method: ProcessBrowser>>changePriority (in category 'process actions') ----- changePriority | str newPriority nameAndRules | - selectedProcess ifNil: [^ self]. nameAndRules := self nameAndRulesForSelectedProcess. nameAndRules third ifFalse: [self inform: 'Nope, won''t change priority of ' , nameAndRules first. ^ self]. str := UIManager default request: 'New priority' initialAnswer: selectedProcess priority asString. newPriority := str asNumber asInteger. newPriority ifNil: [^ self]. (newPriority < 1 or: [newPriority > Processor highestPriority]) ifTrue: [self inform: 'Bad priority'. ^ self]. self class setProcess: selectedProcess toPriority: newPriority. self updateProcessList! Item was changed: ----- Method: ProcessBrowser>>chasePointers (in category 'process actions') ----- chasePointers | saved | - selectedProcess ifNil: [^ self]. saved := selectedProcess. [selectedProcess := nil. (Smalltalk includesKey: #PointerFinder) ifTrue: [PointerFinder on: saved] ifFalse: [self inspectPointers]] ensure: [selectedProcess := saved]! Item was changed: ----- Method: ProcessBrowser>>debugProcess (in category 'process actions') ----- debugProcess | nameAndRules | - selectedProcess ifNil: [^ self]. nameAndRules := self nameAndRulesForSelectedProcess. nameAndRules third ifFalse: [self inform: 'Nope, won''t debug ' , nameAndRules first. ^ self]. self class debugProcess: selectedProcess.! Item was changed: ----- Method: ProcessBrowser>>exploreContext (in category 'stack list') ----- exploreContext + selectedContext explore! - selectedContext ifNotNil: #explore! Item was changed: ----- Method: ProcessBrowser>>exploreProcess (in category 'process list') ----- exploreProcess + selectedProcess explore! - selectedProcess ifNotNil: #explore! Item was changed: ----- Method: ProcessBrowser>>exploreReceiver (in category 'stack list') ----- exploreReceiver + selectedContext receiver explore! - selectedContext ifNotNil: [ - selectedContext receiver explore]! Item was changed: ----- Method: ProcessBrowser>>inspectContext (in category 'stack list') ----- inspectContext + selectedContext inspect! - selectedContext ifNotNil: #inspect! Item was changed: ----- Method: ProcessBrowser>>inspectPointers (in category 'process actions') ----- inspectPointers | tc pointers | - selectedProcess ifNil: [^ self]. tc := thisContext. pointers := PointerFinder pointersTo: selectedProcess except: { self processList. tc. self}. pointers isEmpty ifTrue: [^ self]. OrderedCollectionInspector openOn: pointers withEvalPane: false withLabel: 'Objects pointing to ' , selectedProcess browserPrintString! Item was changed: ----- Method: ProcessBrowser>>inspectProcess (in category 'process list') ----- inspectProcess + selectedProcess inspect! - selectedProcess ifNotNil: #inspect! Item was changed: ----- Method: ProcessBrowser>>inspectReceiver (in category 'stack list') ----- inspectReceiver + selectedContext receiver inspect! - selectedContext ifNotNil: [ - selectedContext receiver inspect]! Item was changed: ----- Method: ProcessBrowser>>messageTally (in category 'stack list') ----- messageTally | secString secs | - selectedProcess ifNil: [^ self]. secString := UIManager default request: 'Profile for how many seconds?' initialAnswer: '4'. secString isEmptyOrNil ifTrue: [^ self]. secs := secString asNumber asInteger. (secs isNil or: [secs isZero]) ifTrue: [^ self]. [ TimeProfileBrowser spyOnProcess: selectedProcess forMilliseconds: secs * 1000 ] forkAt: selectedProcess priority + 1.! Item was changed: ----- Method: ProcessBrowser>>processListKey:from: (in category 'process list') ----- + processListKey: aKey from: aView + + aKey + caseOf: { + [$f] -> [^ self findContext]. + [$g] -> [^ self nextContext]. + [$a] -> [^ self toggleAutoUpdate]. + [$u] -> [^ self updateProcessList] } + otherwise: []. + selectedProcess ifNil: [^ self changed: #flash]. + ^ aKey + caseOf: { + [$i] -> [self inspectProcess]. + [$I] -> [self exploreProcess]. + [$c] -> [self chasePointers]. + [$P] -> [self inspectPointers]. + [$t] -> [self terminateProcess]. + [$r] -> [self resumeProcess]. + [$s] -> [self suspendProcess]. + [$d] -> [self debugProcess]. + [$p] -> [self changePriority]. + [$m] -> [self messageTally]. + [$S] -> [self signalSemaphore]. + [$k] -> [self moreStack]} + otherwise: [self arrowKey: aKey from: aView]! - processListKey: aKey from: aView - ^ aKey caseOf: { - [$i] -> [self inspectProcess]. - [$I] -> [self exploreProcess]. - [$c] -> [self chasePointers]. - [$P] -> [self inspectPointers]. - [$t] -> [self terminateProcess]. - [$r] -> [self resumeProcess]. - [$s] -> [self suspendProcess]. - [$d] -> [self debugProcess]. - [$p] -> [self changePriority]. - [$m] -> [self messageTally]. - [$f] -> [self findContext]. - [$g] -> [self nextContext]. - [$a] -> [self toggleAutoUpdate]. - [$u] -> [self updateProcessList]. - [$S] -> [self signalSemaphore]. - [$k] -> [self moreStack]} - otherwise: [self arrowKey: aKey from: aView]! Item was changed: ----- Method: ProcessBrowser>>resumeProcess (in category 'process actions') ----- resumeProcess - selectedProcess ifNil: [^ self]. self class resumeProcess: selectedProcess. self updateProcessList! Item was changed: ----- Method: ProcessBrowser>>signalSemaphore (in category 'process actions') ----- signalSemaphore - selectedProcess ifNil: [^ self]. (selectedProcess suspendingList isKindOf: Semaphore) ifFalse: [^ self]. [selectedProcess suspendingList signal] fork. (Delay forMilliseconds: 300) wait. "Hate to make the UI wait, but it's convenient..." self updateProcessList! Item was changed: ----- Method: ProcessBrowser>>stackListKey:from: (in category 'views') ----- + stackListKey: aKey from: aView + + selectedContext ifNil: [^ self changed: #flash]. + ^ aKey + caseOf: { + [$c] -> [self inspectContext]. + [$C] -> [self exploreContext]. + [$i] -> [self inspectReceiver]. + [$I] -> [self exploreReceiver]. + [$b] -> [self browseContext]} + otherwise: [self arrowKey: aKey from: aView]! - stackListKey: aKey from: aView - ^ aKey caseOf: { - [$c] -> [self inspectContext]. - [$C] -> [self exploreContext]. - [$i] -> [self inspectReceiver]. - [$I] -> [self exploreReceiver]. - [$b] -> [self browseContext]} - otherwise: [self arrowKey: aKey from: aView]! Item was changed: ----- Method: ProcessBrowser>>suspendProcess (in category 'process actions') ----- suspendProcess | nameAndRules | - selectedProcess ifNil: [^ self]. selectedProcess isSuspended ifTrue: [^ self]. nameAndRules := self nameAndRulesForSelectedProcess. nameAndRules second ifFalse: [self inform: 'Nope, won''t suspend ' , nameAndRules first. ^ self]. self class suspendProcess: selectedProcess. self updateProcessList! Item was changed: ----- Method: ProcessBrowser>>terminateProcess (in category 'process actions') ----- terminateProcess | nameAndRules | - selectedProcess ifNil: [^ self]. nameAndRules := self nameAndRulesForSelectedProcess. nameAndRules second ifFalse: [self inform: 'Nope, won''t kill ' , nameAndRules first. ^ self]. self class terminateProcess: selectedProcess. self updateProcessList! |
Free forum by Nabble | Edit this page |