SystemBrowser.st
changeset 7914 d8fa35236729
parent 7847 bc2f06886dd6
child 7915 56a43b103eaa
--- a/SystemBrowser.st	Thu Dec 20 15:15:31 2007 +0100
+++ b/SystemBrowser.st	Mon Jan 07 14:31:26 2008 +0100
@@ -2536,47 +2536,12 @@
 browseForSymbol:aSymbol in:aSetOfClasses title:title warnIfNone:doWarn
     "launch a browser for all methods referencing aSymbol"
 
-    |browser searchBlock sym|
-
-    (aSymbol includesMatchCharacters) ifTrue:[
-        "a matchString"
-        searchBlock := [:c :m :s |
-                            (m literalsDetect:[:aLiteral|
-                                (aLiteral isMemberOf:Symbol) 
-                                  and:[aSymbol match:aLiteral]
-                            ] ifNone:nil) notNil
-                       ].
-    ] ifFalse:[
-        "
-         can do a faster search
-        "
-        sym := aSymbol asSymbolIfInterned.
-        sym isNil ifTrue:[
-            self showNoneFound:title.
-            ^ nil
-        ].
-
-        searchBlock := [:c :m :s |
-                            (m literalsDetect:[:aLiteral|
-                                (sym == aLiteral) 
-                            ] ifNone:nil) notNil
-                       ].
-    ].
-    doWarn ifFalse:[
-        WarningSignal ignoreIn:[
-            browser := self browseMethodsIn:aSetOfClasses where:searchBlock title:title.
-        ]
-    ] ifTrue:[
-        browser := self browseMethodsIn:aSetOfClasses where:searchBlock title:title.
-    ].
-    browser notNil ifTrue:[
-        browser autoSearch:aSymbol
-    ].
-    ^ browser
-
-    "Modified: 24.6.1996 / 14:39:07 / stefan"
-    "Modified: 30.6.1996 / 16:45:25 / cg"
-    "Created: 10.7.1996 / 10:36:36 / cg"
+    ^ self
+        browseForSymbol:aSymbol 
+        in:aSetOfClasses 
+        title:title 
+        warnIfNone:doWarn
+        searchFor:aSymbol
 !
 
 browseForSymbol:aSymbol in:aSetOfClasses title:title warnIfNone:doWarn searchFor:searchString
@@ -3349,6 +3314,7 @@
 
     "
      SystemBrowser browseSendersOf:#+
+     UserPreferences current systemBrowserClass browseSendersOf:#+
     "
 
     "Modified: / 10.7.1996 / 10:26:15 / cg"
@@ -3523,25 +3489,49 @@
 !
 
 filterToSearchRefsTo:varName classVars:classVars access:accessType
+    "return a searchblock for variable references (obsolete)"
+
+    ^ self
+        filterToSearchRefsTo:varName 
+        instVars:(classVars not) 
+        classVars:classVars 
+        globals:false 
+        access:accessType
+!
+
+filterToSearchRefsTo:varName classVars:classVars modificationsOnly:modsOnly
+    "return a searchblock for variable references"
+
+    ^ self
+        filterToSearchRefsTo:varName 
+        classVars:classVars 
+        access:(modsOnly ifTrue:#write ifFalse:#readWrite)
+!
+
+filterToSearchRefsTo:varName instVars:doInstVars classVars:doClassVars globals:doGlobals access:accessType
     "return a searchblock for variable references"
 
     |searchBlock|
 
     searchBlock := [:c :m :s |
-        |src result parser vars needMatch|
+        |src result parser vars instVars classVars globals needMatch|
 
         needMatch := varName includesMatchCharacters.
 
+        result := false.
+
         src := m source.
-        src isNil ifTrue:[
-            result := false
-        ] ifFalse:[
+        src notNil ifTrue:[
             needMatch ifFalse:[
                 "
                  before doing a slow parse, quickly scan the
                  methods source for the variables name ...
                 "
-                result := (src findString:varName) ~~ 0.
+                (varName includes:$:) ifTrue:[
+                    result := (src findString:(varName copyFrom:(varName lastIndexOf:$:)+1)) ~~ 0.
+                ] ifFalse:[
+                    result := (src findString:varName) ~~ 0.
+                ].
             ] ifTrue:[
                 result := true.
             ].
@@ -3554,97 +3544,46 @@
                                 ignoreWarnings:true.
 
                 (parser notNil and:[parser ~~ #Error]) ifTrue:[
-                    classVars ifFalse:[
+                    vars := Set new.    
+                    doInstVars ifTrue:[
                         accessType == #read ifTrue:[
-                            vars := parser readInstVars
+                            instVars := parser readInstVars
                         ] ifFalse:[
                             accessType == #write ifTrue:[
-                                vars := parser modifiedInstVars
+                                instVars := parser modifiedInstVars
                             ] ifFalse:[
-                                vars := parser usedInstVars
+                                instVars := parser usedInstVars
                             ]
                         ].
-                    ] ifTrue:[    
+                        vars addAll:instVars.
+                    ].
+                    doClassVars ifTrue:[
                         accessType == #read ifTrue:[
-                            vars := parser readClassVars
+                            classVars := parser readClassVars
                         ] ifFalse:[
                             accessType == #write ifTrue:[
-                                vars := parser modifiedClassVars
+                                classVars := parser modifiedClassVars
                             ] ifFalse:[
-                                vars := parser usedClassVars
+                                classVars := parser usedClassVars
                             ]
                         ].
+                        vars addAll:classVars.
+                    ].
+                    doGlobals ifTrue:[
+                        accessType == #read ifTrue:[
+                            globals := parser readGlobals
+                        ] ifFalse:[
+                            accessType == #write ifTrue:[
+                                globals := parser modifiedGlobals
+                            ] ifFalse:[
+                                globals := parser usedGlobals
+                            ]
+                        ].
+                        vars addAll:globals.
                     ].
                     vars size > 0 ifTrue:[
                         needMatch ifTrue:[
-                            vars do:[:cv |
-                                (varName match:cv) ifTrue:[result := true]
-                            ]
-                        ] ifFalse:[
-                            result := vars includes:varName
-                        ]
-                    ]
-                ].
-            ].
-        ].
-        Processor yield.
-        result
-    ].
-    ^ searchBlock
-
-    "Modified: 19.6.1997 / 18:27:57 / cg"
-!
-
-filterToSearchRefsTo:varName classVars:classVars modificationsOnly:modsOnly
-    "return a searchblock for variable references"
-
-    |searchBlock|
-
-    searchBlock := [:c :m :s |
-        |src result parser vars needMatch|
-
-        needMatch := varName includesMatchCharacters.
-
-        src := m source.
-        src isNil ifTrue:[
-            result := false
-        ] ifFalse:[
-            needMatch ifFalse:[
-                "
-                 before doing a slow parse, quickly scan the
-                 methods source for the variables name ...
-                "
-                result := (src findString:varName) ~~ 0.
-            ] ifTrue:[
-                result := true.
-            ].
-            result ifTrue:[
-                result := false.
-                parser := Parser
-                                parseMethod:src 
-                                in:c 
-                                ignoreErrors:true 
-                                ignoreWarnings:true.
-
-                (parser notNil and:[parser ~~ #Error]) ifTrue:[
-                    classVars ifFalse:[
-                        modsOnly ifTrue:[
-                            vars := parser modifiedInstVars
-                        ] ifFalse:[
-                            vars := parser usedInstVars
-                        ].
-                    ] ifTrue:[    
-                        modsOnly ifTrue:[
-                            vars := parser modifiedClassVars
-                        ] ifFalse:[
-                            vars := parser usedClassVars
-                        ].
-                    ].
-                    vars size > 0 ifTrue:[
-                        needMatch ifTrue:[
-                            vars do:[:cv |
-                                (varName match:cv) ifTrue:[result := true]
-                            ]
+                            result := vars contains:[:cv | (varName match:cv)]
                         ] ifFalse:[
                             result := vars includes:varName
                         ]
@@ -5427,7 +5366,7 @@
 !SystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.246 2007-09-20 14:10:09 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.247 2008-01-07 13:31:26 cg Exp $'
 ! !
 
 SystemBrowser initialize!