Fix in Smalltalk code completion: when completing selector, add each selector only once.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 02 Oct 2013 02:42:05 +0100
changeset 114 55b3efed5a57
parent 113 2a6e9aaef00f
child 115 254c4f5dc963
Fix in Smalltalk code completion: when completing selector, add each selector only once.
SmallSense__SmalltalkCompletion.st
--- a/SmallSense__SmalltalkCompletion.st	Tue Oct 01 14:45:17 2013 +0100
+++ b/SmallSense__SmalltalkCompletion.st	Wed Oct 02 02:42:05 2013 +0100
@@ -150,19 +150,43 @@
 !
 
 addMethodsStartingWith: prefix
+    | selectors |
+
+    selectors := Dictionary new.
+
 
     Smalltalk allClassesDo:[:class|
-        class selectorsAndMethodsDo:[:selector :met | 
+        class selectorsAndMethodsDo:[:selector :mthd | 
             (selector startsWith: prefix) ifTrue:[
-                resultSet add:(MethodPO 
-                            name:selector
-                            description:"met source"nil
-                            class:class).
+                | class skip |
+
+                class := mthd mclass superclass.
+                skip := false.
+                [ skip not and:[class notNil] ] whileTrue:[
+                    (class methodDictionary includesKey: selector) ifTrue:[
+                        skip := true.
+                    ].
+                    class := class superclass.
+                ].
+                skip ifFalse:[
+                    | classes |
+
+                    classes := selectors at: selector ifAbsentPut:[ Set new ].
+                    classes add: mthd mclass.
+                ].
             ]
         ].
     ].
 
+    selectors keysAndValuesDo: [:selector :classes|
+        resultSet add:(MethodPO 
+                name:selector
+                description:"met source"nil
+                class:(classes size == 1 ifTrue:[classes anElement] ifFalse:[classes])).
+    ]
+
     "Created: / 24-07-2013 / 13:10:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-10-2013 / 02:20:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 addPools