SystemBrowser.st
changeset 2642 cab6366238a4
parent 2631 bd18074649ed
child 2655 9e90bbd1eb18
--- a/SystemBrowser.st	Tue Mar 21 12:21:47 2000 +0100
+++ b/SystemBrowser.st	Tue Mar 21 12:24:17 2000 +0100
@@ -1188,93 +1188,16 @@
     "launch a browser for all implementors of aSelector in
      the classes contained in aCollectionOfClasses and its metaclasses"
 
-    |list sel srchST srchJava lcSelector|
-
-    list := IdentitySet new.
-
-    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
-        "a matchString"
-
-        ignoreCase == true ifTrue:[
-            lcSelector := aSelectorString asLowercase.
-
-            srchST := [:aSelector :aMethod |
-                            (lcSelector match:aSelector asLowercase) ifTrue:[
-                                list add:aMethod
-                            ]
-                      ].
-            srchJava := [:aSelector :aMethod |
-                            (aSelector match:aMethod name asLowercase) ifTrue:[
-                                list add:aMethod
-                            ]
-                      ].
-        ] ifFalse:[
-            srchST := [:aSelector :aMethod |
-                            (aSelectorString match:aSelector) ifTrue:[
-                                list add:aMethod
-                            ]
-                      ].
-            srchJava := [:aSelector :aMethod |
-                            (aSelectorString match:aMethod name) ifTrue:[
-                                list add:aMethod
-                            ]
-                      ].
-        ].
-    ] ifFalse:[
-        "can do a faster search"
-
-        sel := aSelectorString asSymbolIfInterned.
-        sel isNil ifTrue:[
-            self showNoneFound:title.
-            ^ nil
-        ].
+    |list|
 
-        ignoreCase == true ifTrue:[
-            lcSelector := sel asLowercase.
-            srchJava := [:aSelector :aMethod |
-                            "/ allow search for signature AND
-                            "/ search for plain name
-                            ((aMethod name asLowercase = lcSelector)
-                            or:[aSelector asLowercase = lcSelector]) ifTrue:[
-                                list add:aMethod
-                            ]
-                        ].
-            srchST := [:aSelector :aMethod |
-                            (aSelector asLowercase = lcSelector) ifTrue:[
-                                list add:aMethod
-                            ]
-                        ].
-        ] ifFalse:[
-            srchJava := [:aSelector :aMethod |
-                            "/ allow search for signature AND
-                            "/ search for plain name
-                            ((aMethod name = sel)
-                            or:[aSelector == sel]) ifTrue:[
-                                list add:aMethod
-                            ]
-                        ].
-            srchST := [:aSelector :aMethod |
-                            (aSelector == sel) ifTrue:[
-                                list add:aMethod
-                            ]
-                        ].
-        ].
-    ].
+    list := self 
+                findImplementorsOf:aSelectorString 
+                in:aCollectionOfClasses 
+                ignoreCase:ignoreCase.
 
-    aCollectionOfClasses do:[:aClass |
-        |srchBlock|
-
-        aClass isObsolete ifFalse:[
-            aClass isJavaClass ifTrue:[
-                srchBlock := srchJava
-            ] ifFalse:[
-                srchBlock := srchST
-            ].
-            aClass methodDictionary keysAndValuesDo:srchBlock.
-            aClass isMeta ifFalse:[
-                aClass class methodDictionary keysAndValuesDo:srchBlock
-            ]
-        ]
+    list size == 0 ifTrue:[
+        self showNoneFound:title.
+        ^ nil
     ].
 
     ^ self browseMethods:list asOrderedCollection title:title
@@ -1748,6 +1671,127 @@
     ^ searchBlock
 
     "Modified: 19.6.1997 / 18:27:57 / cg"
+!
+
+findImplementorsOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase
+    "search for all implementors of aSelector in
+     the classes contained in aCollectionOfClasses and its metaclasses.
+     Return a collection of methods"
+
+    |list sel srchST srchJava lcSelector|
+
+    list := IdentitySet new.
+
+    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
+        "a matchString"
+
+        ignoreCase == true ifTrue:[
+            lcSelector := aSelectorString asLowercase.
+
+            srchST := [:aSelector :aMethod |
+                            (lcSelector match:aSelector asLowercase) ifTrue:[
+                                list add:aMethod
+                            ]
+                      ].
+            srchJava := [:aSelector :aMethod |
+                            (aSelector match:aMethod name asLowercase) ifTrue:[
+                                list add:aMethod
+                            ]
+                      ].
+        ] ifFalse:[
+            srchST := [:aSelector :aMethod |
+                            (aSelectorString match:aSelector) ifTrue:[
+                                list add:aMethod
+                            ]
+                      ].
+            srchJava := [:aSelector :aMethod |
+                            (aSelectorString match:aMethod name) ifTrue:[
+                                list add:aMethod
+                            ]
+                      ].
+        ].
+    ] ifFalse:[
+        "can do a faster search"
+
+        sel := aSelectorString asSymbolIfInterned.
+        sel isNil ifTrue:[
+            ^ nil
+        ].
+
+        ignoreCase == true ifTrue:[
+            lcSelector := sel asLowercase.
+            srchJava := [:aSelector :aMethod |
+                            "/ allow search for signature AND
+                            "/ search for plain name
+                            ((aMethod name asLowercase = lcSelector)
+                            or:[aSelector asLowercase = lcSelector]) ifTrue:[
+                                list add:aMethod
+                            ]
+                        ].
+            srchST := [:aSelector :aMethod |
+                            (aSelector asLowercase = lcSelector) ifTrue:[
+                                list add:aMethod
+                            ]
+                        ].
+        ] ifFalse:[
+            srchJava := [:aSelector :aMethod |
+                            "/ allow search for signature AND
+                            "/ search for plain name
+                            ((aMethod name = sel)
+                            or:[aSelector == sel]) ifTrue:[
+                                list add:aMethod
+                            ]
+                        ].
+            srchST := [:aSelector :aMethod |
+                            (aSelector == sel) ifTrue:[
+                                list add:aMethod
+                            ]
+                        ].
+        ].
+    ].
+
+    aCollectionOfClasses do:[:aClass |
+        |srchBlock|
+
+        aClass isObsolete ifFalse:[
+            aClass isJavaClass ifTrue:[
+                srchBlock := srchJava
+            ] ifFalse:[
+                srchBlock := srchST
+            ].
+            aClass methodDictionary keysAndValuesDo:srchBlock.
+            aClass isMeta ifFalse:[
+                aClass class methodDictionary keysAndValuesDo:srchBlock
+            ]
+        ]
+    ].
+
+    ^ list
+
+    "
+     SystemBrowser findImplementorsOf:#+
+                                     in:(Array with:Number
+                                               with:Float
+                                               with:SmallInteger)
+    "
+
+!
+
+findSendersOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase
+    "search for all senders of aSelector in
+     the classes contained in aCollectionOfClasses and its metaclasses.
+     Return a collection of methods"
+
+    ^ self allCallsOn:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase
+
+    "
+     SystemBrowser findSendersOf:#+
+                   in:(Array with:Number
+                             with:Float
+                             with:SmallInteger)
+                   ignoreCase:false
+    "
+
 ! !
 
 !SystemBrowser class methodsFor:'startup'!
@@ -2215,6 +2259,6 @@
 !SystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.102 2000-02-22 18:40:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.103 2000-03-21 11:24:17 cg Exp $'
 ! !
 SystemBrowser initialize!