diff -r d4f1cd8626e6 -r a1349bc5e2fe 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" ! !