<div dir="ltr">Hi,<div>I don't look at class variables very often, but when I want to it's hard to get to them, and even hard to remember the how to get to them. It is also hard to discover a way to get to them for a beginner.</div>
<div><br></div><div><br></div><div>Cheers,</div><div>Karl</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jan 27, 2014 at 4:08 AM, Chris Muller <span dir="ltr"><<a href="mailto:asqueaker@gmail.com" target="_blank">asqueaker@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Browsing all class-vars of a class at once? Is that something you<br>
want to do very often? Fewer than 5% [1] of classes in the system<br>
have more than one class var. Maybe it's a sign of having too many<br>
class-vars in a class..?<br>
<br>
If looking one of the 4.2% of classes that have more than 1 class var,<br>
their individual values can be inspected straight from the definition,<br>
and the class itself explored simply by double clicking the class name<br>
pressing Command+Shift+I. The classPool is presented right there.<br>
That's only +2 gestures for this pretty rare(?) thing.<br>
<br>
Of all the entries in that menu, "browse class vars" is the one that<br>
stands alone.<br>
<br>
So it seems like we shouldn't have it in the menu.<br>
<br>
[1] -- (((Object withAllSubclasses count: [ : e | e classVarNames size<br>
> 1 ]) / Object withAllSubclasses size)) asFloat<br>
<div class="HOEnZb"><div class="h5"><br>
On Sun, Jan 26, 2014 at 3:07 PM, karl ramberg <<a href="mailto:karlramberg@gmail.com">karlramberg@gmail.com</a>> wrote:<br>
> I miss the menu options to inspect and explore class variables.<br>
> This change makes it much harder to inspect values stored in class variables<br>
><br>
> Cheers,<br>
> Karl<br>
><br>
><br>
><br>
> On Tue, May 3, 2011 at 1:36 AM, <<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>> wrote:<br>
>><br>
>> Chris Muller uploaded a new version of Tools to project The Trunk:<br>
>> <a href="http://source.squeak.org/trunk/Tools-cmm.347.mcz" target="_blank">http://source.squeak.org/trunk/Tools-cmm.347.mcz</a><br>
>><br>
>> ==================== Summary ====================<br>
>><br>
>> Name: Tools-cmm.347<br>
>> Author: cmm<br>
>> Time: 2 May 2011, 6:36:40.244 pm<br>
>> UUID: 977c180b-7c15-4200-9ceb-319d2e850364<br>
>> Ancestors: Tools-fbs.346, Tools-fbs.345<br>
>><br>
>> - Update menu "inst var defs" to "assignments..." and "inst var refs" to<br>
>> "references...". Each option now includes a selection of the available<br>
>> class-variables, enabling "class var refs" to be removed. Each option also<br>
>> has an appropriate hot-key assignment.<br>
>> - Removed "class vars" because one could simply explore the class'<br>
>> classPool.<br>
>><br>
>> =============== Diff against Tools-fbs.346 ===============<br>
>><br>
>> Item was changed:<br>
>> ----- Method: Browser>>classListMenu:shifted: (in category 'class<br>
>> functions') -----<br>
>> classListMenu: aMenu shifted: shifted<br>
>> "Set up the menu to apply to the receiver's class list, honoring<br>
>> the #shifted boolean"<br>
>> self<br>
>> menuHook: aMenu<br>
>> named: #classListMenu<br>
>> shifted: shifted.<br>
>> Preferences useOnlyServicesInMenu ifTrue:[^aMenu].<br>
>> shifted ifTrue:[^ self shiftedClassListMenu: aMenu].<br>
>> aMenu addList: #(<br>
>> -<br>
>> ('browse full (b)' browseMethodFull)<br>
>> ('browse hierarchy (h)' spawnHierarchy)<br>
>> ('browse protocol (p)' browseFullProtocol)<br>
>> -<br>
>> ('printOut'<br>
>> printOutClass)<br>
>> ('fileOut'<br>
>> fileOutClass)<br>
>> -<br>
>> ('show hierarchy' hierarchy)<br>
>> ('show definition' editClass)<br>
>> ('show comment' editComment)<br>
>> -<br>
>> + ('references... (r)'<br>
>> browseVariableReferences)<br>
>> + ('assignments... (a)'<br>
>> browseVariableAssignments)<br>
>> - ('inst var refs...' browseInstVarRefs)<br>
>> - ('inst var defs...' browseInstVarDefs)<br>
>> - -<br>
>> - ('class var refs...'<br>
>> browseClassVarRefs)<br>
>> - ('class vars'<br>
>> browseClassVariables)<br>
>> ('class refs (N)'<br>
>> browseClassRefs)<br>
>> -<br>
>> ('rename class ...' renameClass)<br>
>> ('copy class' copyClass)<br>
>> ('remove class (x)' removeClass)<br>
>> -<br>
>> ('find method...'<br>
>> findMethod)<br>
>> -<br>
>> ('more...'<br>
>> offerShiftedClassListMenu)).<br>
>> ^ aMenu<br>
>> !<br>
>><br>
>> Item was changed:<br>
>> ----- Method: Browser>>messageListMenu:shifted: (in category 'message<br>
>> functions') -----<br>
>> messageListMenu: aMenu shifted: shifted<br>
>> "Answer the message-list menu"<br>
>> self<br>
>> menuHook: aMenu<br>
>> named: #messageListMenu<br>
>> shifted: shifted.<br>
>> Preferences useOnlyServicesInMenu ifTrue:[^aMenu].<br>
>> shifted ifTrue: [^ self shiftedMessageListMenu: aMenu].<br>
>> aMenu addList: #(<br>
>> ('what to show...'<br>
>> offerWhatToShowMenu)<br>
>> ('toggle break on entry'<br>
>> toggleBreakOnEntry)<br>
>> -<br>
>> ('browse full (b)'<br>
>> browseMethodFull)<br>
>> ('browse hierarchy (h)'<br>
>> classHierarchy)<br>
>> ('browse method (O)'<br>
>> openSingleMessageBrowser)<br>
>> ('browse protocol (p)'<br>
>> browseFullProtocol)<br>
>> -<br>
>> ('fileOut'<br>
>> fileOutMessage)<br>
>> ('printOut'<br>
>> printOutMessage)<br>
>> ('copy selector (c)'<br>
>> copySelector)<br>
>> ('copy reference'<br>
>> copyReference)<br>
>> -<br>
>> ('senders of... (n)'<br>
>> browseSendersOfMessages)<br>
>> ('implementors of... (m)'<br>
>> browseMessages)<br>
>> ('inheritance (i)'<br>
>> methodHierarchy)<br>
>> ('versions (v)'<br>
>> browseVersions)<br>
>> -<br>
>> + ('references... (r)'<br>
>> browseVariableReferences)<br>
>> + ('assignments... (a)'<br>
>> browseVariableAssignments)<br>
>> - ('inst var refs...'<br>
>> browseInstVarRefs)<br>
>> - ('inst var defs...'<br>
>> browseInstVarDefs)<br>
>> - ('class var refs...'<br>
>> browseClassVarRefs)<br>
>> - ('class variables'<br>
>> browseClassVariables)<br>
>> ('class refs (N)'<br>
>> browseClassRefs)<br>
>> -<br>
>> ('remove method (x)'<br>
>> removeMessage)<br>
>> ('explore method'<br>
>> exploreMethod)<br>
>> ('inspect method'<br>
>> inspectMethod)<br>
>> -<br>
>> ('more...'<br>
>> shiftedYellowButtonActivity)).<br>
>> ^ aMenu!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: Browser>>reformulateList (in category 'message list')<br>
>> -----<br>
>> reformulateList<br>
>> "If the receiver has a way of reformulating its message list, here<br>
>> is a chance for it to do so"<br>
>> super reformulateList.<br>
>> (self messageList includes: self selectedMessageName)<br>
>> + ifFalse: [ self messageList<br>
>> + ifEmpty: [ self<br>
>> selectMessageNamed: nil ]<br>
>> + ifNotEmpty: [ self<br>
>> selectMessageNamed: self lastMessageName ]].!<br>
>> - ifFalse: [ self selectMessageNamed: self lastMessageName<br>
>> ].!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: ChangeSorter>>classListMenu:shifted: (in category 'class<br>
>> list') -----<br>
>> classListMenu: aMenu shifted: shifted<br>
>> "Fill aMenu with items appropriate for the class list"<br>
>><br>
>> aMenu title: 'class list'.<br>
>> aMenu addStayUpItemSpecial.<br>
>> (parent notNil and: [shifted not])<br>
>> ifTrue: [aMenu addList: #( "These two only apply to dual<br>
>> change sorters"<br>
>> ('copy class chgs to other side'<br>
>> copyClassToOther)<br>
>> ('move class chgs to other side'<br>
>> moveClassToOther))].<br>
>><br>
>> aMenu addList: (shifted<br>
>> ifFalse: [#(<br>
>> -<br>
>> ('delete class from change set (d)'<br>
>> forgetClass)<br>
>> ('remove class from system (x)'<br>
>> removeClass)<br>
>> -<br>
>> ('browse full (b)'<br>
>> browseMethodFull)<br>
>> ('browse hierarchy (h)'<br>
>> spawnHierarchy)<br>
>> ('browse protocol (p)'<br>
>> browseFullProtocol)<br>
>> -<br>
>> ('printOut'<br>
>> printOutClass)<br>
>> ('fileOut'<br>
>> fileOutClass)<br>
>> -<br>
>> + ('references... (r)'<br>
>> browseVariableReferences)<br>
>> + ('assignments... (a)'<br>
>> browseVariableAssignments)<br>
>> - ('inst var refs...'<br>
>> browseInstVarRefs)<br>
>> - ('inst var defs...'<br>
>> browseInstVarDefs)<br>
>> - ('class var refs...'<br>
>> browseClassVarRefs)<br>
>> - ('class vars'<br>
>> browseClassVariables)<br>
>> ('class refs (N)'<br>
>> browseClassRefs)<br>
>> -<br>
>> ('more...'<br>
>> offerShiftedClassListMenu))]<br>
>><br>
>> ifTrue: [#(<br>
>> -<br>
>> ('unsent methods'<br>
>> browseUnusedMethods)<br>
>> ('unreferenced inst vars'<br>
>> showUnreferencedInstVars)<br>
>> ('unreferenced class vars'<br>
>> showUnreferencedClassVars)<br>
>> -<br>
>> ('sample instance'<br>
>> makeSampleInstance)<br>
>> ('inspect instances'<br>
>> inspectInstances)<br>
>> ('inspect subinstances'<br>
>> inspectSubInstances)<br>
>> -<br>
>> ('more...'<br>
>> offerUnshiftedClassListMenu ))]).<br>
>> ^ aMenu!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: CodeHolder>>abbreviatedWordingFor: (in category<br>
>> 'commands') -----<br>
>> abbreviatedWordingFor: aButtonSelector<br>
>> + "Answer the abbreviated form of wording, from a static table.<br>
>> Answer nil if there is no entry -- in which case the long form will be used<br>
>> on the corresponding browser button."<br>
>> - "Answer the abbreviated form of wording, from a static table which<br>
>> you're welcome to edit. Answer nil if there is no entry -- in which case<br>
>> the long firm will be used on the corresponding browser button."<br>
>><br>
>> #(<br>
>> (browseMethodFull 'browse')<br>
>> (browseSendersOfMessages 'senders')<br>
>> (browseMessages 'impl')<br>
>> (browseVersions 'vers')<br>
>> (methodHierarchy 'inher')<br>
>> (classHierarchy 'hier')<br>
>> + (browseVariableReferences 'refs')<br>
>> - (browseInstVarRefs 'iVar')<br>
>> - (browseClassVarRefs 'cVar')<br>
>> (offerMenu 'menu'))<br>
>> do:<br>
>><br>
>> [:pair | pair first == aButtonSelector ifTrue: [^ pair<br>
>> second]].<br>
>> ^ nil!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: CodeHolder>>messageListKey:from: (in category 'message<br>
>> list menu') -----<br>
>> messageListKey: aChar from: view<br>
>> "Respond to a Command key. I am a model with a code pane, and I<br>
>> also<br>
>> have a listView that has a list of methods. The view knows how to<br>
>> get<br>
>> the list and selection."<br>
>><br>
>> | sel class |<br>
>> aChar == $D ifTrue: [^ self toggleDiffing].<br>
>><br>
>> sel := self selectedMessageName.<br>
>> aChar == $m ifTrue: "These next two put up a type in if no<br>
>> message selected"<br>
>> [^ self useSelector: sel orGetSelectorAndSendQuery:<br>
>> #browseAllImplementorsOf: to: self ].<br>
>> aChar == $n ifTrue:<br>
>> [^ self useSelector: sel orGetSelectorAndSendQuery:<br>
>> #browseAllCallsOn: to: self ].<br>
>><br>
>> "The following require a class selection"<br>
>> (class := self selectedClassOrMetaClass) ifNil: [^ self arrowKey:<br>
>> aChar from: view].<br>
>> aChar == $b ifTrue: [^ Browser fullOnClass: class selector: sel].<br>
>> aChar == $N ifTrue: [^ self browseClassRefs].<br>
>> aChar == $i ifTrue: [^ self methodHierarchy].<br>
>> aChar == $h ifTrue: [^ self classHierarchy].<br>
>> aChar == $p ifTrue: [^ self browseFullProtocol].<br>
>> + aChar == $r ifTrue: [^ self browseVariableReferences].<br>
>> + aChar == $a ifTrue: [^ self browseVariableAssignments].<br>
>><br>
>> +<br>
>> "The following require a method selection"<br>
>> sel ifNotNil:<br>
>> [aChar == $o ifTrue: [^ self fileOutMessage].<br>
>> aChar == $c ifTrue: [^ self copySelector].<br>
>> aChar == $v ifTrue: [^ self browseVersions].<br>
>> aChar == $O ifTrue: [^ self openSingleMessageBrowser].<br>
>> aChar == $x ifTrue: [^ self removeMessage].<br>
>> aChar == $d ifTrue: [^ self removeMessageFromBrowser].<br>
>><br>
>> (aChar == $C and: [self canShowMultipleMessageCategories])<br>
>> ifTrue: [^ self showHomeCategory]].<br>
>><br>
>> ^ self arrowKey: aChar from: view!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: CodeHolder>>optionalButtonPairs (in category 'controls')<br>
>> -----<br>
>> optionalButtonPairs<br>
>> "Answer a tuple (formerly pairs) defining buttons, in the format:<br>
>> button label<br>
>> selector to send<br>
>> help message"<br>
>><br>
>> | aList |<br>
>><br>
>> aList := #(<br>
>> ('browse' browseMethodFull<br>
>> 'view this method in a browser')<br>
>> ('senders' browseSendersOfMessages 'browse<br>
>> senders of...')<br>
>> ('implementors' browseMessages<br>
>> 'browse implementors of...')<br>
>> ('versions' browseVersions<br>
>> 'browse versions')),<br>
>><br>
>> (Preferences decorateBrowserButtons<br>
>> ifTrue:<br>
>> [{#('inheritance' methodHierarchy<br>
>> 'browse method inheritance<br>
>> green: sends to super<br>
>> tan: has override(s)<br>
>> mauve: both of the above<br>
>> pink: is an override but doesn''t call super<br>
>> pinkish tan: has override(s), also is an override but doesn''t call<br>
>> super' )}]<br>
>> ifFalse:<br>
>> [{#('inheritance' methodHierarchy<br>
>> 'browse method inheritance')}]),<br>
>><br>
>> #(<br>
>> ('hierarchy' classHierarchy<br>
>> 'browse class hierarchy')<br>
>> + ('vars' browseVariableReferences<br>
>> 'references...')).<br>
>> - ('inst vars' browseInstVarRefs<br>
>> 'inst var refs...')<br>
>> - ('class vars' browseClassVarRefs<br>
>> 'class var refs...')).<br>
>><br>
>> ^ aList!<br>
>><br>
>> Item was added:<br>
>> + ----- Method: CodeHolder>>receiverClass (in category 'toolbuilder')<br>
>> -----<br>
>> + receiverClass<br>
>> + ^ self selectedClassOrMetaClass !<br>
>><br>
>> Item was added:<br>
>> + ----- Method: Debugger>>classHierarchy (in category 'toolbuilder') -----<br>
>> + classHierarchy<br>
>> + "Create and schedule a class list browser on the receiver's<br>
>> hierarchy."<br>
>> + (self selectedMessageName = #doesNotUnderstand: and: [ self<br>
>> selectedClassOrMetaClass = Object ])<br>
>> + ifTrue:<br>
>> + [ self systemNavigation<br>
>> + spawnHierarchyForClass: self receiverClass<br>
>> + selector: self selectedMessageName ]<br>
>> + ifFalse: [ super classHierarchy ]!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: Debugger>>contextStackMenu:shifted: (in category 'context<br>
>> stack menu') -----<br>
>> contextStackMenu: aMenu shifted: shifted<br>
>> "Set up the menu appropriately for the context-stack-list, either<br>
>> shifted or unshifted as per the parameter provided"<br>
>><br>
>> ^ shifted ifFalse:[<br>
>> aMenu addList: {<br>
>> {'fullStack (f)'. #fullStack}.<br>
>> {'restart (r)'. #restart}.<br>
>> {'proceed (p)'. #proceed}.<br>
>> {'step (t)'. #doStep}.<br>
>> {'step through (T)'. #stepIntoBlock}.<br>
>> {'send (e)'. #send}.<br>
>> {'where (w)'. #where}.<br>
>> {'peel to first like this'.<br>
>> #peelToFirst}.<br>
>> #-.<br>
>> {'return entered value'.<br>
>> #returnValue}.<br>
>> #-.<br>
>> {'toggle break on entry'.<br>
>> #toggleBreakOnEntry}.<br>
>> {'senders of... (n)'.<br>
>> #browseSendersOfMessages}.<br>
>> {'implementors of... (m)'. #browseMessages}.<br>
>> {'inheritance (i)'. #methodHierarchy}.<br>
>> #-.<br>
>> {'versions (v)'. #browseVersions}.<br>
>> - {'inst var refs...'.<br>
>> #browseInstVarRefs}.<br>
>> #-.<br>
>> + {'references... (r)'.<br>
>> #browseVariableReferences}.<br>
>> + {'assignments... (a)'.<br>
>> #browseVariableAssignments}.<br>
>> - {'inst var defs...'. #browseInstVarDefs}.<br>
>> - {'class var refs...'. #browseClassVarRefs}.<br>
>> - {'class variables'. #browseClassVariables}.<br>
>> #-.<br>
>> {'class refs (N)'. #browseClassRefs}.<br>
>> {'browse full (b)'. #browseMethodFull}.<br>
>> {'file out '. #fileOutMessage}.<br>
>> #-.<br>
>> {'mail out bug report'. #mailOutBugReport}.<br>
>> {'more...'.<br>
>> #shiftedYellowButtonActivity}.<br>
>> }.<br>
>> ] ifTrue: [<br>
>> aMenu addList: {<br>
>> {'browse class hierarchy'. #classHierarchy}.<br>
>> {'browse class'.<br>
>> #browseClass}.<br>
>> {'browse method (O)'.<br>
>> #openSingleMessageBrowser}.<br>
>> {'implementors of sent messages'.<br>
>> #browseAllMessages}.<br>
>> {'change sets with this method'.<br>
>> #findMethodInChangeSets}.<br>
>> #-.<br>
>> {'inspect instances'.<br>
>> #inspectInstances}.<br>
>> {'inspect subinstances'.<br>
>> #inspectSubInstances}.<br>
>> #-.<br>
>> {'revert to previous version'.<br>
>> #revertToPreviousVersion}.<br>
>> {'remove from current change set'.<br>
>> #removeFromCurrentChanges}.<br>
>> {'revert & remove from changes'.<br>
>> #revertAndForget}.<br>
>> #-.<br>
>> {'more...'.<br>
>> #unshiftedYellowButtonActivity}.<br>
>> }<br>
>> ].!<br>
>><br>
>> Item was added:<br>
>> + ----- Method: Debugger>>receiverClass (in category 'toolbuilder') -----<br>
>> + receiverClass<br>
>> + ^ self selectedContext receiver class!<br>
>><br>
>> Item was removed:<br>
>> - ----- Method: Inspector>>classVarRefs (in category 'menu commands')<br>
>> -----<br>
>> - classVarRefs<br>
>> - "Request a browser of methods that store into a chosen instance<br>
>> variable"<br>
>> -<br>
>> - | aClass |<br>
>> - (aClass := self classOfSelection) ifNotNil:<br>
>> - [self systemNavigation browseClassVarRefs: aClass].<br>
>> - !<br>
>><br>
>> Item was changed:<br>
>> ----- Method: Inspector>>fieldListMenu: (in category 'menu commands')<br>
>> -----<br>
>> fieldListMenu: aMenu<br>
>> "Arm the supplied menu with items for the field-list of the<br>
>> receiver"<br>
>><br>
>> aMenu addStayUpItemSpecial.<br>
>><br>
>> aMenu addList: #(<br>
>> ('inspect (i)'<br>
>> inspectSelection)<br>
>> ('explore (I)'<br>
>> exploreSelection)).<br>
>><br>
>> self addCollectionItemsTo: aMenu.<br>
>><br>
>> aMenu addList: #(<br>
>> -<br>
>> ('method refs to this inst var'<br>
>> referencesToSelection)<br>
>> ('methods storing into this inst var' defsOfSelection)<br>
>> ('objects pointing to this value'<br>
>> objectReferencesToSelection)<br>
>> ('chase pointers'<br>
>> chasePointers)<br>
>> ('explore pointers'<br>
>> explorePointers)<br>
>> -<br>
>> ('browse full (b)'<br>
>> browseMethodFull)<br>
>> ('browse class'<br>
>> browseClass)<br>
>> ('browse hierarchy (h)'<br>
>> classHierarchy)<br>
>> ('browse protocol (p)'<br>
>> browseFullProtocol)<br>
>> -<br>
>> + ('references... (r)'<br>
>> browseVariableReferences)<br>
>> + ('assignments... (a)'<br>
>> browseVariableAssignments)<br>
>> - ('inst var refs...'<br>
>> browseInstVarRefs)<br>
>> - ('inst var defs...'<br>
>> browseInstVarDefs)<br>
>> - ('class var refs...'<br>
>> classVarRefs)<br>
>> - ('class variables'<br>
>> browseClassVariables)<br>
>> ('class refs (N)'<br>
>> browseClassRefs)<br>
>> -<br>
>> ('copy name (c)'<br>
>> copyName)<br>
>> ('basic inspect'<br>
>> inspectBasic)).<br>
>><br>
>> Smalltalk isMorphic ifTrue:<br>
>> [aMenu addList: #(<br>
>> -<br>
>> ('tile for this value (t)'<br>
>> tearOffTile)<br>
>> ('viewer for this value (v)'<br>
>> viewerForValue))].<br>
>><br>
>> ^ aMenu<br>
>><br>
>><br>
>> " -<br>
>> ('alias for this value'<br>
>> aliasForValue)<br>
>> ('watcher for this slot'<br>
>> watcherForSlot)"<br>
>><br>
>> !<br>
>><br>
>> Item was changed:<br>
>> ----- Method: RecentMessageSet>>messageListMenu:shifted: (in category<br>
>> 'message functions') -----<br>
>> messageListMenu: aMenu shifted: shifted<br>
>> "Answer the message-list menu"<br>
>><br>
>> shifted ifTrue: [^ self shiftedMessageListMenu: aMenu].<br>
>> aMenu addList:#(<br>
>> ('what to show...'<br>
>> offerWhatToShowMenu)<br>
>> -<br>
>> ('browse full (b)'<br>
>> browseMethodFull)<br>
>> ('browse hierarchy (h)'<br>
>> classHierarchy)<br>
>> ('browse method (O)'<br>
>> openSingleMessageBrowser)<br>
>> ('browse protocol (p)'<br>
>> browseFullProtocol)<br>
>> -<br>
>> ('fileOut (o)'<br>
>> fileOutMessage)<br>
>> ('printOut'<br>
>> printOutMessage)<br>
>> ('copy selector (c)'<br>
>> copySelector)<br>
>> ('copy reference'<br>
>> copyReference)<br>
>> -<br>
>> ('senders of... (n)'<br>
>> browseSendersOfMessages)<br>
>> ('implementors of... (m)'<br>
>> browseMessages)<br>
>> ('inheritance (i)'<br>
>> methodHierarchy)<br>
>> ('versions (v)'<br>
>> browseVersions)<br>
>> -<br>
>> + ('references... (r)'<br>
>> browseVariableReferences)<br>
>> + ('assignments... (a)'<br>
>> browseVariableAssignments)<br>
>> - ('inst var refs...'<br>
>> browseInstVarRefs)<br>
>> - ('inst var defs...'<br>
>> browseInstVarDefs)<br>
>> - ('class var refs...'<br>
>> browseClassVarRefs)<br>
>> - ('class variables'<br>
>> browseClassVariables)<br>
>> ('class refs (N)'<br>
>> browseClassRefs)<br>
>> -<br>
>> ('remove method (x)'<br>
>> removeMessage)<br>
>> ('remove from RecentSubmissions'<br>
>> removeFromRecentSubmissions)<br>
>> -<br>
>> ('more...'<br>
>> shiftedYellowButtonActivity)).<br>
>> ^ aMenu!<br>
>><br>
>> Item was removed:<br>
>> - ----- Method: StringHolder>>browseClassVarRefs (in category<br>
>> '*Tools-traits') -----<br>
>> - browseClassVarRefs<br>
>> - "1/17/96 sw: devolve responsibility to the class, so that the code<br>
>> that does the real work can be shared"<br>
>> -<br>
>> - | cls |<br>
>> - cls := self selectedClass.<br>
>> - (cls notNil and: [cls isTrait not])<br>
>> - ifTrue: [self systemNavigation browseClassVarRefs: cls]!<br>
>><br>
>> Item was removed:<br>
>> - ----- Method: StringHolder>>browseClassVariables (in category<br>
>> '*Tools-traits') -----<br>
>> - browseClassVariables<br>
>> - "Browse the class variables of the selected class. 2/5/96 sw"<br>
>> - | cls |<br>
>> - cls := self selectedClass.<br>
>> - (cls notNil and: [cls isTrait not])<br>
>> - ifTrue: [self systemNavigation browseClassVariables: cls]<br>
>> - !<br>
>><br>
>> Item was removed:<br>
>> - ----- Method: StringHolder>>browseInstVarDefs (in category<br>
>> '*Tools-traits') -----<br>
>> - browseInstVarDefs<br>
>> -<br>
>> - | cls |<br>
>> - cls := self selectedClassOrMetaClass.<br>
>> - (cls notNil and: [cls isTrait not])<br>
>> - ifTrue: [self systemNavigation browseInstVarDefs: cls]!<br>
>><br>
>> Item was removed:<br>
>> - ----- Method: StringHolder>>browseInstVarRefs (in category<br>
>> '*Tools-traits') -----<br>
>> - browseInstVarRefs<br>
>> - "1/26/96 sw: real work moved to class, so it can be shared"<br>
>> - | cls |<br>
>> - cls := self selectedClassOrMetaClass.<br>
>> - (cls notNil and: [cls isTrait not])<br>
>> - ifTrue: [self systemNavigation browseInstVarRefs: cls]!<br>
>><br>
>> Item was added:<br>
>> + ----- Method: StringHolder>>browseVariableAssignments (in category<br>
>> '*Tools-traits') -----<br>
>> + browseVariableAssignments<br>
>> + | cls |<br>
>> + cls := self selectedClassOrMetaClass.<br>
>> + (cls notNil and: [ cls isTrait not ]) ifTrue: [ self<br>
>> systemNavigation browseVariableAssignments: cls ]!<br>
>><br>
>> Item was added:<br>
>> + ----- Method: StringHolder>>browseVariableReferences (in category<br>
>> '*Tools-traits') -----<br>
>> + browseVariableReferences<br>
>> + | cls |<br>
>> + cls := self selectedClassOrMetaClass.<br>
>> + (cls notNil and: [cls isTrait not])<br>
>> + ifTrue: [self systemNavigation browseVariableReferences:<br>
>> cls]!<br>
>><br>
>> Item was changed:<br>
>> ----- Method: StringHolder>>classListKey:from: (in category '*Tools')<br>
>> -----<br>
>> classListKey: aChar from: view<br>
>> "Respond to a Command key. I am a model with a list of classes<br>
>> and a<br>
>> code pane, and I also have a listView that has a list of methods.<br>
>> The<br>
>> view knows how to get the list and selection."<br>
>><br>
>> aChar == $f ifTrue: [^ self findMethod].<br>
>> + aChar == $r ifTrue: [^ self browseVariableReferences].<br>
>> + aChar == $a ifTrue: [^ self browseVariableAssignments].<br>
>> - aChar == $r ifTrue: [^ self browseInstVarRefs].<br>
>> - aChar == $d ifTrue: [^ self browseInstVarDefs].<br>
>> aChar == $h ifTrue: [^ self spawnHierarchy].<br>
>> aChar == $x ifTrue: [^ self removeClass].<br>
>> ^ self messageListKey: aChar from: view!<br>
>><br>
>><br>
><br>
><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>