[squeak-dev] The Inbox: ToolBuilder-Kernel-jr.110.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue May 16 17:02:07 UTC 2017
A new version of ToolBuilder-Kernel was added to project The Inbox:
http://source.squeak.org/inbox/ToolBuilder-Kernel-jr.110.mcz
==================== Summary ====================
Name: ToolBuilder-Kernel-jr.110
Author: jr
Time: 13 May 2017, 10:49:04.306891 pm
UUID: 41b8cbb2-c017-f84b-af5d-a6b52d1365cd
Ancestors: ToolBuilder-Kernel-jr.109
extend behavior search to all environments
=============== Diff against ToolBuilder-Kernel-jr.109 ===============
Item was added:
+ ----- Method: ClassDescription>>labelForBehaviorsList (in category '*ToolBuilder-Kernel') -----
+ labelForBehaviorsList
+ ^ self name,
+ (self environment == Smalltalk globals
+ ifTrue: ['']
+ ifFalse: [' (', self environment name, ')'])!
Item was changed:
----- Method: UIManager>>classFromPattern:withCaption: (in category 'system introspecting') -----
classFromPattern: pattern withCaption: aCaption
+ ^self classOrTraitFromAny: (Environment allInstances) pattern: pattern label: aCaption
- ^self classFromPattern: pattern withCaption: aCaption in: Smalltalk environment
"
self classFromPattern: 'CharRecog' withCaption: ''
self classFromPattern: 'rRecog' withCaption: ''
self classFromPattern: 'znak' withCaption: ''
self classFromPattern: 'orph' withCaption: ''
self classFromPattern: 'TCompil' withCaption: ''
"
!
Item was added:
+ ----- Method: UIManager>>classOrTraitFromAny:pattern:label: (in category 'system introspecting') -----
+ classOrTraitFromAny: environments pattern: pattern label: label
+ "If only one class or trait in the given environments has a name that matches pattern, return it.
+ Otherwise, put up a menu offering the names (and environments) of all matching behaviors, and return the chosen one, else nil if nothing chosen.
+ This method ignores separator characters in the pattern"
+
+ | toMatch allBehaviors matchingBehaviors exactMatches behaviorsWithReducedIdentifiers behaviorLabels |
+ toMatch := pattern copyWithoutAll: Character separators.
+ toMatch ifEmpty: [ ^nil ].
+ "If there are behaviors named exactly as pattern, choose only from them."
+ Symbol hasInterned: pattern ifTrue: [ :symbol | | declaringEnvironments |
+ declaringEnvironments := environments select: [:each |
+ each at: symbol ifPresent: [:it | it isBehavior] ifAbsent: [false]].
+ declaringEnvironments size = 1
+ ifTrue: [^ declaringEnvironments anyOne at: symbol].
+ declaringEnvironments ifNotEmpty: [ | behaviors |
+ behaviors := (declaringEnvironments collect: [:each | each at: symbol]) asOrderedCollection sort: [:a :b | a name <= b name].
+ behaviorLabels := behaviors collect: [:each | each labelForBehaviorsList].
+ ^ self chooseFrom: behaviorLabels values: behaviors title: label]].
+ "No exact match, look for potential matches."
+ toMatch := pattern asLowercase copyWithout: $..
+ allBehaviors := environments gather: [:each | each allClassesAndTraits].
+ matchingBehaviors := (pattern last = $. "This is some old hack, using String>>#match: may be better."
+ ifTrue: [ allBehaviors select: [ :each | each name asLowercase = toMatch ] ]
+ ifFalse: [
+ allBehaviors select: [ :each |
+ each name includesSubstring: toMatch caseSensitive: false ] ])
+ asOrderedCollection.
+ exactMatches := matchingBehaviors select: [ :each | each name asLowercase = toMatch ].
+ "Also try some fuzzy matching."
+ behaviorsWithReducedIdentifiers := pattern suggestedTypeNames gather: [:each |
+ allBehaviors select: [:behavior | behavior name = each]].
+ behaviorsWithReducedIdentifiers ifNotEmpty: [
+ matchingBehaviors addAll: behaviorsWithReducedIdentifiers].
+ "Let the user select if there's more than one possible match. This may give surprising results."
+ matchingBehaviors ifEmpty: [^ nil "nothing matches"].
+ matchingBehaviors size = 1 ifTrue: [^ matchingBehaviors anyOne].
+ exactMatches ifNotEmpty: [matchingBehaviors addAllFirst: exactMatches].
+ behaviorLabels := matchingBehaviors collect: [:each | each labelForBehaviorsList].
+ ^ self chooseFrom: behaviorLabels values: matchingBehaviors title: label!
More information about the Squeak-dev
mailing list
|