changed:
authorClaus Gittinger <cg@exept.de>
Sun, 24 Jun 2012 18:42:06 +0200
changeset 2892 a1349bc5e2fe
parent 2891 d4f1cd8626e6
child 2893 feb4eeba44ad
changed: #updateImplementorsOf: #updateListAfterPatternSearch:
MethodFinderWindow.st
--- a/MethodFinderWindow.st	Fri Jun 01 13:22:10 2012 +0200
+++ b/MethodFinderWindow.st	Sun Jun 24 18:42:06 2012 +0200
@@ -792,44 +792,65 @@
 
 updateImplementorsOf:anInteger 
     "Request the implementors of the selected argument provided by aNumber.
-     Return the receiver. "
-      |methods classList aNumber|
-
+     Return the receiver."
+    
+    |methods classList aNumber|
 
-       (anInteger isNil) ifTrue:[^self].
-      anInteger isNil ifTrue:[aNumber:=1]
-                      ifFalse:[aNumber:=anInteger].  
-      methods:=SystemBrowser findImplementorsOf: (resultSelectors at:aNumber) in:Smalltalk allClasses ignoreCase:false.
-      classList:=methods asOrderedCollection collect:[:m | m mclass name , ' ' , m selector].
+    (anInteger isNil) ifTrue:[
+        ^ self
+    ].
+    anInteger isNil ifTrue:[
+        aNumber := 1
+    ] ifFalse:[
+        aNumber := anInteger
+    ].
+    methods := SystemBrowser 
+            findImplementorsOf:(resultSelectors at:aNumber)
+            in:Smalltalk allClasses
+            ignoreCase:false.
+    classList := methods asOrderedCollection 
+            collect:[:m | m mclass name , ' ' , m selector ].
+    classList := (self markMatchingClasses:(resultSelectors at:aNumber)
+            classesWithSelector:classList).
+    self classOfResultHolder value:classList.
+    classList size > 0 ifTrue:[
+        self selectedClassOfResultHolder value:(classList first).
+        self selectedClassOfResultHolderChanged.
+    ] ifFalse:[
+        self selectedClassOfResultHolder value:nil.
+    ].
 
-      classList:=(self markMatchingClasses:(resultSelectors at:aNumber) classesWithSelector:classList).
-
-    self classOfResultHolder value: classList.
-    self selectedClassOfResultHolder value:nil.
-
-    "Modified: / 13.11.2001 / 12:07:31 / cg"
+    "Modified (comment): / 24-06-2012 / 18:41:45 / cg"
 !
 
-updateListAfterPatternSearch:list
+updateListAfterPatternSearch:list 
     "Do a search based on the pattern match"
-
-    | selectors counts|
+    
+    |selectors counts firsts|
 
-    self resultHolder value: nil.                "reset the result list"
-    self classOfResultHolder value: nil.         "reset the implementorOf list"
-    self codeHolder value: nil.                  "reset the source"
-
+    self resultHolder value:nil.
+    self classOfResultHolder value:nil.
+    self codeHolder value:nil.
     counts := IdentityDictionary new.
+    firsts := IdentityDictionary new.
     selectors := IdentitySet new.
+    list do:[:eachMethod | 
+        selectors add:eachMethod selector.
+        (counts at:(eachMethod selector) ifAbsentPut:[ 0 asValue ]) increment.
+        firsts at:(eachMethod selector) ifAbsentPut:[ eachMethod mclass ].
+    ].
+    resultSelectors := selectors asOrderedCollection sort.
+    self resultHolder value:(resultSelectors 
+                collect:[:sel | 
+                    |cnt|
 
-    list do:[:eachMethod |
-        selectors add: eachMethod selector.
-        (counts at:(eachMethod selector) ifAbsentPut:[0 asValue]) increment
-    ].
-
-    resultSelectors := selectors asOrderedCollection sort.
-
-    self resultHolder value: (resultSelectors collect:[:sel | sel,' --> ',(counts at:sel) value printString,' implementor(s)']).
+                    cnt := (counts at:sel) value.
+                    cnt == 1 ifTrue:[
+                        sel , ' --> ' , (firsts at:sel) name
+                    ] ifFalse:[
+                        sel , ' --> ' , cnt printString , ' implementor(s)'
+                    ].
+                ]).
 
     "Created: / 01-06-2012 / 13:17:34 / cg"
 ! !