--- a/SystemBrowser.st Fri May 23 12:14:28 2003 +0200
+++ b/SystemBrowser.st Fri May 23 14:09:53 2003 +0200
@@ -4815,7 +4815,16 @@
classWithNameSimilarTo:className
"helper for class-name entry; finds a class by name tolerant w.r.t. case"
- |nm lcName class allClasses triedMatchers|
+ |allMatchingClasses|
+
+ allMatchingClasses := self classesWithNameSimilarTo:className.
+ ^ allMatchingClasses firstIfEmpty:nil
+!
+
+classesWithNameSimilarTo:className
+ "helper for class-name entry; finds a class by name tolerant w.r.t. case"
+
+ |nm lcName class allClasses triedDetectors triedMatchers allMatchingClasses|
(className startsWith:'Smalltalk::') ifTrue:[
nm := className copyFrom:('Smalltalk::' size + 1).
@@ -4824,25 +4833,48 @@
].
class := Smalltalk at:nm asSymbol.
- class isBehavior ifTrue:[^ class]. "/ a direct hit
+ class isBehavior ifTrue:[^ Array with:class]. "/ a direct hit
lcName := className asLowercase.
+ class := Smalltalk at:lcName asSymbol.
+ class isBehavior ifTrue:[^ Array with:class]. "/ an almost direct hit
+
allClasses := Smalltalk allClasses.
triedMatchers := OrderedCollection new.
- triedMatchers add:[:cls | cls name asLowercase = lcName].
+ triedDetectors := OrderedCollection new.
+ triedDetectors add:[:cls | cls name asLowercase = lcName].
+ triedDetectors add:[:cls | cls nameWithoutPrefix asLowercase = lcName].
+ triedDetectors add:[:cls | cls nameWithoutNameSpacePrefix asLowercase = lcName].
+
triedMatchers add:[:cls | cls name asLowercase startsWith:lcName].
- triedMatchers add:[:cls | cls nameWithoutNameSpacePrefix asLowercase = lcName].
triedMatchers add:[:cls | cls nameWithoutNameSpacePrefix asLowercase startsWith:lcName].
- triedMatchers add:[:cls | cls nameWithoutPrefix asLowercase = lcName].
triedMatchers add:[:cls | cls nameWithoutPrefix asLowercase startsWith:lcName].
triedMatchers add:[:cls | cls nameWithoutPrefix asLowercase includesString:lcName].
-
- triedMatchers do:[:eachTry |
+ triedMatchers add:[:cls | cls name asLowercase includesString:lcName].
+
+ triedDetectors do:[:eachTry |
+ |class|
+
class := allClasses detect:eachTry ifNone:nil.
- class notNil ifTrue:[^ class].
+ class notNil ifTrue:[^ Array with:class].
].
- ^ nil
+
+ allMatchingClasses := IdentitySet new.
+ triedMatchers do:[:eachTry |
+ |matchingClasses|
+
+ matchingClasses := allClasses select:eachTry.
+ matchingClasses size == 1 ifTrue:[^ matchingClasses].
+ allMatchingClasses addAll:matchingClasses.
+ ].
+ allMatchingClasses isEmpty ifTrue:[^ #()].
+
+ allMatchingClasses := allMatchingClasses asOrderedCollection.
+ allMatchingClasses sort:[:a :b | (lcName levenshteinTo:a name asLowercase)
+ <
+ (lcName levenshteinTo:b name asLowercase)].
+ ^ allMatchingClasses.
!
extractClassAndSelectorFrom:aString into:aBlock
@@ -4994,7 +5026,7 @@
!SystemBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.190 2003-05-22 08:00:31 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.191 2003-05-23 12:09:53 cg Exp $'
! !
SystemBrowser initialize!