#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Wed, 04 May 2016 22:39:03 +0200
changeset 3290 19e31edb0dd6
parent 3289 2902c1233b4e
child 3291 30f8b248f77c
#FEATURE by cg class: MethodFinderWindow added: #waitForBackgroundSearchFinished comment/format in: #openOnSelectorPattern: changed: #markMatchingClasses:classesWithSelector: #searchPatternMatchesInBackground #selectedImplementorsHolder #windowSpec
MethodFinderWindow.st
--- a/MethodFinderWindow.st	Wed May 04 07:51:59 2016 +0200
+++ b/MethodFinderWindow.st	Wed May 04 22:39:03 2016 +0200
@@ -98,7 +98,7 @@
                              )
                             (ComboListSpec
                                name: 'allowedArgments'
-                               layout: (LayoutFrame 0 0.34000000000000002 1 0 0 0.64000000000000012 28 0)
+                               layout: (LayoutFrame 0 0.34000000000000002 1 0 0 0.64000000000000024 28 0)
                                model: argCountHolder
                                comboList: argCountList
                                useIndex: true
@@ -106,7 +106,7 @@
                             (LabelSpec
                                label: 'Answer'
                                name: 'MessageAnswerLabel'
-                               layout: (LayoutFrame 0 0.64000000000000012 0 0 0 1 28 0)
+                               layout: (LayoutFrame 0 0.64000000000000024 0 0 0 1 28 0)
                                translateLabel: true
                              )
                             (HorizontalPanelViewSpec
@@ -261,7 +261,7 @@
                        )
                       (ViewSpec
                          name: 'MatchActionBox'
-                         layout: (LayoutFrame 0 0 -70 0.5 0 1 -20 0.5)
+                         layout: (LayoutFrame 0 0 -70 0.5 0 1 10 0.5)
                          component: 
                         (SpecCollection
                            collection: (
@@ -274,7 +274,7 @@
                              )
                             (InputFieldSpec
                                name: 'EntryField1'
-                               layout: (LayoutFrame 0 0 -25 1 0 0.5 0 1)
+                               layout: (LayoutFrame 2 0 -54 1 -2 1 -29 1)
                                model: selectorPattern
                                immediateAccept: true
                                acceptOnReturn: true
@@ -295,13 +295,12 @@
                        )
                       (SequenceViewSpec
                          name: 'ResultList'
-                         layout: (LayoutFrame 0 0 -15 0.5 0 1 0 1)
+                         layout: (LayoutFrame 0 0 15 0.5 0 1 0 1)
                          model: selectedImplementorsHolder
                          menu: resultListMenu
                          hasHorizontalScrollBar: true
                          hasVerticalScrollBar: true
                          autoHideScrollBars: true
-                         valueChangeSelector: updateImplementorsOf:
                          useIndex: true
                          sequenceList: resultHolder
                        )
@@ -343,7 +342,7 @@
                 )
               
              )
-             handles: (Any 0.37391304347826088 1.0)
+             handles: (Any 0.37391304347826093 1.0)
            )
           )
         
@@ -487,6 +486,8 @@
     app allButOpen.
     app selectorPattern value:selector.
     app openWindow.
+    "/ app waitForBackgroundSearchFinished.
+    
     ^ app
 
     "
@@ -831,13 +832,15 @@
 
     searchProcess := 
         [
-            |list counts firsts seconds selectors resultList|
+            |list counts firsts seconds selectors resultList idx match|
 
             self withCursor:Cursor execute do:[
                 pattern includesMatchCharacters ifFalse:[   
-                    pattern := '*',pattern,'*'
+                    list := SystemBrowser findImplementorsOf:pattern in:Smalltalk allClasses ignoreCase:true.
+                ] ifTrue:[
+                    match := '*',pattern,'*'.
+                    list := SystemBrowser findImplementorsMatching:match in:Smalltalk allClasses ignoreCase:true.
                 ].
-                list := SystemBrowser findImplementorsMatching:pattern in:Smalltalk allClasses ignoreCase:true.
             ].
 
             counts := IdentityDictionary new.
@@ -875,7 +878,13 @@
                                     ]
                                 ].
                             ].
-            self enqueueDelayedAction:[ self updateListAfterPatternSearch: resultList ]
+            self enqueueDelayedAction:[ self updateListAfterPatternSearch: resultList ].
+            "/ is it in the list?
+            idx := resultSelectors indexOf:pattern.
+            idx ~~ 0 ifTrue:[
+                self enqueueDelayedAction:[ self selectedImplementorsHolder value:idx ].
+            ].    
+            
         ] fork.
 
     "Created: / 01-06-2012 / 13:16:54 / cg"
@@ -942,6 +951,14 @@
     self resultHolder value:resultList.
 
     "Created: / 01-06-2012 / 13:17:34 / cg"
+!
+
+waitForBackgroundSearchFinished
+    | p |
+
+    (p := searchProcess) isNil ifTrue:[^ self].
+    p isDead ifTrue:[^ self].
+    p waitUntilTerminated 
 ! !
 
 !MethodFinderWindow methodsFor:'aspects'!
@@ -1069,6 +1086,7 @@
 
     (holder := builder bindingAt:#selectedImplementorsHolder) isNil ifTrue:[
         holder := ValueHolder new.
+        holder onChangeEvaluate:[self updateImplementorsOf:holder value].
         builder aspectAt:#selectedImplementorsHolder put:holder
     ].
     ^ holder
@@ -1213,10 +1231,10 @@
     recClass := receiver value class.
     unmarkedClassList := anOrderedCollection copy.
     unmarkedClassList do:[:classAndMethod | 
-        |class|
+        |className class sel|
 
-        class := Compiler 
-                evaluate:(classAndMethod upToAll:aSelector).
+        className := classAndMethod copyButLast:aSelector size.
+        class := Smalltalk classNamed:className. "/ Compiler evaluate:className.
         
         "/ (recClass == class)