Fix in Smalltalk code completion: when completing selector, add each selector only once.
--- 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