Big Tools question - Why no way to "scope" tools to less than Global?

Damien Cassou damien.cassou at gmail.com
Mon Jan 7 07:33:55 UTC 2008


Hi Zulq,

can you please post that directly to the Monticello repository
source.wiresong.ca/ob with a useful comment?

Then, people will be able to review it more easily.

Thank you

On Jan 4, 2008 1:53 PM, Zulq Alam <me at zulq.net> wrote:
> I get those bugs too. Not sure about the status of this functionality. I
> just discovered it myself.
>
> Not sure whether the senders / implementors menu items scope should
> match the current browser scope. That's probably because I don't like
> the idea of scoped browsers. I'd prefer targeted menu options and prompts.
>
> For example, if I try to rename #at:put: in my class, rather than be
> presented with yes / no prompt to continue, more options could be
> provided like "package" or "hierarchy only". As it stands the "This will
> modify X implementors. Do you want to proceed?" dialogue is really just
> telling you how much of a bad move you're making.
>
> Anyway, an easy way to view package senders / implementors isn't
> available (unless I've missed it?). I've wanted this for a while so I've
> created the attached change set to add "package implementors" and
> "package senders" menu items.
>
> It's my first time adding stuff to the OmniBrowser so would appreciate
> any comments on the idea and implementation.
>
> Thanks,
> Zulq.
>
>
> itsme213 wrote:
> > Hi Zulq,
> >
> >> You can restrict the scope of refactorings using the "open environment"
> >> menu item in the class context menu. You may have seen it above "refactor
> >> class", "refactor class variable", etc.
> >
> > Fantastic! Seems slightly buggy (I got several #doesNotUnderstand:
> > #includesCategory) but I can see this becoming my default browser.
> >
> > Since re-factoring operations are scoped in this browser, I tried
> > Senders/Implementors in the same scoped browser and found them global again
> > (at least I could not find a way). Shouldn't all of these be consistently
> > scoped?
> >
> > Thanks,
> >
> > Sophie
> >
> >
> >
> >
> >
>
> 'From Squeak3.9 of 7 November 2006 [latest update: #7067] on 4 January 2008 at 12:32:23 pm'!
> Smalltalk renameClassNamed: #OBCmdBrowseCategoryImplementors as: #OBCmdBrowsePackageImplementors!
> OBCmdBrowseList subclass: #OBCmdBrowsePackageImplementors
>         instanceVariableNames: ''
>         classVariableNames: ''
>         poolDictionaries: ''
>         category: 'OB-Standard-Commands'!
> OBCmdBrowseList subclass: #OBCmdBrowsePackageSenders
>         instanceVariableNames: ''
>         classVariableNames: ''
>         poolDictionaries: ''
>         category: 'OB-Standard-Commands'!
> Smalltalk renameClassNamed: #OBCategoryImplementorsBrowser as: #OBPackageImplementorsBrowser!
> OBImplementorsBrowser subclass: #OBPackageImplementorsBrowser
>         instanceVariableNames: ''
>         classVariableNames: ''
>         poolDictionaries: ''
>         category: 'OB-Standard-Browsers'!
> OBSendersBrowser subclass: #OBPackageSendersBrowser
>         instanceVariableNames: ''
>         classVariableNames: ''
>         poolDictionaries: ''
>         category: 'OB-Standard-Browsers'!
> Smalltalk renameClassNamed: #OBShowCategoryImplementors as: #OBShowPackageImplementors!
> OBNavigate subclass: #OBShowPackageImplementors
>         instanceVariableNames: ''
>         classVariableNames: ''
>         poolDictionaries: ''
>         category: 'OB-Standard-Announcements'!
> OBNavigate subclass: #OBShowPackageSenders
>         instanceVariableNames: ''
>         classVariableNames: ''
>         poolDictionaries: ''
>         category: 'OB-Standard-Announcements'!
>
> !OBCmdBrowsePackageImplementors methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:47'!
> announcementClass
>         ^ OBShowPackageImplementors! !
>
> !OBCmdBrowsePackageImplementors methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:14'!
> isActive
>         ^ (target isKindOf: OBMethodNode) and: [requestor isSelected: target]! !
>
> !OBCmdBrowsePackageImplementors methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:49'!
> label
>     ^ 'package implementors'! !
>
>
> !OBCmdBrowsePackageSenders methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:55'!
> announcementClass
>         ^ OBShowPackageSenders! !
>
> !OBCmdBrowsePackageSenders methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:54'!
> isActive
>         ^ (target isKindOf: OBMethodNode) and: [requestor isSelected: target]! !
>
> !OBCmdBrowsePackageSenders methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:55'!
> label
>     ^ 'package senders'! !
>
>
> !OBCodeBrowser methodsFor: 'commands' stamp: 'za 1/4/2008 11:48'!
> cmdBrowseCategoryImplementors
>         ^ OBCmdBrowsePackageImplementors! !
>
> !OBCodeBrowser methodsFor: 'commands' stamp: 'za 1/4/2008 11:55'!
> cmdBrowseCategorySenders
>         ^ OBCmdBrowsePackageSenders! !
>
>
> !OBMethodNode methodsFor: 'private' stamp: 'za 1/4/2008 11:56'!
> packageImplementorsOf: aSelector
>         ^ ((PackageOrganizer default packageOfClass: theClass) classes
>                 select: [:eachClass | eachClass includesSelector: aSelector ])
>                 collect: [:eachClass | OBMethodNode on: aSelector inClass: eachClass]! !
>
> !OBMethodNode methodsFor: 'private' stamp: 'za 1/4/2008 12:23'!
> packageSendersOf: aSelector
>         | special byte classes senders  |
>         special := Smalltalk hasSpecialSelector: aSelector ifTrueSetByte: [:b | byte := b].
>         classes := (PackageOrganizer default packageOfClass: theClass) classes.
>         senders := OrderedCollection new.
>         classes do: [:eachClass |
>                 senders addAll: ((Preferences thoroughSenders
>                         ifTrue: [
>                                 eachClass
>                                         thoroughWhichSelectorsReferTo: aSelector
>                                         special: special
>                                         byte: byte]
>                         ifFalse: [
>                                 eachClass
>                                         whichSelectorsReferTo: aSelector
>                                         special: special
>                                         byte: byte])
>                         collect: [:eachSymbol | eachClass -> eachSymbol])].
>         ^ senders collect: [:eachAssociation | OBMethodNode on: eachAssociation value inClass: eachAssociation key]
> ! !
>
> !OBMethodNode methodsFor: 'navigating' stamp: 'za 1/4/2008 11:45'!
> packageImplementors
>         ^ self packageImplementorsOf: selector! !
>
> !OBMethodNode methodsFor: 'navigating' stamp: 'za 1/4/2008 11:49'!
> packageSenders
>         ^ self packageSendersOf: selector! !
>
>
> !OBPackageImplementorsBrowser class methodsFor: 'configuration' stamp: 'za 1/4/2008 11:45'!
> defaultMetaNode
>         ^ self implementorsNav: #packageImplementors! !
>
> !OBPackageImplementorsBrowser class methodsFor: 'configuration' stamp: 'za 1/4/2008 11:46'!
> title
>         ^ 'Package Implementors of'! !
>
>
> !OBPackageSendersBrowser class methodsFor: 'configuration' stamp: 'za 1/4/2008 11:52'!
> defaultMetaNode
>     ^self sendersNav: #packageSenders.
>     ! !
>
> !OBPackageSendersBrowser class methodsFor: 'configuration' stamp: 'za 1/4/2008 11:52'!
> title
>         ^'Package Senders of'
>     ! !
>
>
> !OBShowPackageImplementors methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:46'!
> browserClass
>         ^ OBPackageImplementorsBrowser! !
>
> !OBShowPackageImplementors methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:47'!
> noChildrenMessage
>         ^ 'no package implementors'! !
>
>
> !OBShowPackageSenders methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:53'!
> browserClass
>         ^ OBPackageSendersBrowser! !
>
> !OBShowPackageSenders methodsFor: 'as yet unclassified' stamp: 'za 1/4/2008 11:54'!
> noChildrenMessage
>         ^ 'no package senders'! !
>
>
> !OBPackageImplementorsBrowser class reorganize!
> ('configuration' defaultMetaNode title)
> !
>
>
>
>
>



-- 
Damien Cassou



More information about the Squeak-dev mailing list