[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