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