class: Tools::MethodRewriter
class definition
added:
#classesChanged
#classesInfoTextHolder
#methodsForClasses
UI improvement: show number of classes/methods.
--- a/Tools__MethodRewriter.st Mon May 11 15:18:55 2015 +0200
+++ b/Tools__MethodRewriter.st Mon May 11 17:25:48 2015 +0200
@@ -38,7 +38,8 @@
ruleReplacePatternHolder ruleSearchPatternHolder
ruleSearchAndReplacePatternHolder ruleForRewriteOrNilForAdHoc
adHocFindAndReplaceVisibleHolder ruleNameHolder
- isMethodPatternHolder'
+ isMethodPatternHolder classesInfoTextHolder
+ cachedMethodsFromClasses'
classVariableNames:''
poolDictionaries:''
category:'Interface-Tools'
@@ -239,7 +240,7 @@
)
(SelectionInListModelViewSpec
name: 'ClassesList'
- layout: (LayoutFrame 0 0 30 0 0 1 -30 1)
+ layout: (LayoutFrame 0 0 30 0 0 1 -60 1)
model: selectedClassesHolder
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
@@ -255,6 +256,13 @@
dragArgument: nil
)
)
+ (LabelSpec
+ name: 'ClassInfoLabel'
+ layout: (LayoutFrame 0 0 -60 1 0 1 -30 1)
+ translateLabel: true
+ labelChannel: classesInfoTextHolder
+ adjust: left
+ )
(HorizontalPanelViewSpec
name: 'HorizontalPanel1'
layout: (LayoutFrame 0 0 -30 1 -16 1 0 1)
@@ -573,33 +581,33 @@
(LabelSpec
label: 'Enjoy'
name: 'Label1'
- layout: (LayoutFrame 5 0 -25 1 205 0 -5 1)
- visibilityChannel: actionInProgressHolder
+ layout: (LayoutFrame 5 0 -25 1 255 0 -5 1)
+ xxvisibilityChannel: actionInProgressHolder
translateLabel: true
labelChannel: infoHolder
adjust: left
)
(ProgressIndicatorSpec
name: 'ProgressIndicator1'
- layout: (LayoutFrame 210 0 -25 1 -215 1 -5 1)
- visibilityChannel: actionInProgressHolder
+ layout: (LayoutFrame 260 0 -25 1 -215 1 -5 1)
+ xxvisibilityChannel: actionInProgressHolder
model: progressHolder
)
(ActionButtonSpec
label: 'Search'
name: 'Button2'
layout: (LayoutFrame -210 1 -26 1 -110 1 -5 1)
+ activeHelpKey: doSearchAction
translateLabel: true
model: doSearchAction
- activeHelpKey: doSearchAction
)
(ActionButtonSpec
label: 'Rewrite...'
name: 'Button1'
layout: (LayoutFrame -105 1 -25 1 -5 1 -5 1)
+ activeHelpKey: doRewriteAction
translateLabel: true
model: doRewriteAction
- activeHelpKey: doRewriteAction
)
)
@@ -877,13 +885,6 @@
!MethodRewriter methodsFor:'accessing'!
-actionInProgress: aBoolean
-
- ^self actionInProgressHolder value: aBoolean
-
- "Created: / 12-12-2007 / 10:06:16 / janfrog"
-!
-
classes
^ classes ifNil:[classes := List new]
@@ -891,8 +892,10 @@
!
classes: aCollection
- classes := ((aCollection collect:[:cls|cls theNonMetaclass])
- sort:[:a :b | a className < b className]) asList
+ self classes contents:((aCollection collect:[:cls|cls theNonMetaclass])
+ sortBySelector:#name).
+ self classesChanged
+
"Created: / 20-07-2007 / 16:31:18 / janfrog"
"Modified: / 12-12-2007 / 09:47:01 / janfrog"
@@ -906,7 +909,7 @@
!
progress: anInteger
-
+ self actionInProgressHolder value:true.
self progressHolder value: anInteger
"Created: / 12-12-2007 / 10:01:03 / janfrog"
@@ -1136,7 +1139,9 @@
removeSeletedClassesAction
- self classes removeAll: self selectedClasses
+ self classes removeAll: self selectedClasses.
+ classes changed:#content.
+ self classesChanged.
"Created: / 12-12-2007 / 12:05:15 / janfrog"
!
@@ -1177,6 +1182,13 @@
^ adHocFindAndReplaceVisibleHolder.
!
+classesInfoTextHolder
+ classesInfoTextHolder isNil ifTrue:[
+ classesInfoTextHolder := '' asValue.
+ ].
+ ^ classesInfoTextHolder.
+!
+
howToUseRewriteToolURL
^ HTMLDocumentFrame documentFileFor:'help/Browser/RewriteToolHelp.html'
!
@@ -1330,6 +1342,16 @@
!MethodRewriter methodsFor:'change & update'!
+classesChanged
+ cachedMethodsFromClasses := nil. "/ flush
+ methods := nil.
+
+ self classesInfoTextHolder
+ value:(((classes size == 1) ifTrue:['%1 class / %2 method(s)'] ifFalse:['%1 classes / %2 methods'])
+ bindWith:classes size
+ with:self methods size)
+!
+
selectedRuleIndexChanged
|selectedRuleSpec|
@@ -1382,7 +1404,7 @@
doDropClasses: dropContext
"I accept classes, methods and packages"
- | droppedProjects droppedClasses newClasses |
+ | droppedProjects droppedClasses newClasses classesAlready|
droppedProjects := dropContext dropObjects
select:[:obj| obj isProjectObject]
@@ -1405,10 +1427,13 @@
droppedClasses addAll:(Smalltalk allClassesInPackage:eachPackage)
].
- newClasses := droppedClasses reject:[:cls | self classes includes:cls].
+ classesAlready := self classes asSet.
+ newClasses := droppedClasses reject:[:cls | classesAlready includes:cls].
+
self classes
addAll: newClasses;
- changed:#content.
+ sortBySelector:#name.
+ self classesChanged
"Created: / 20-07-2007 / 16:58:16 / janfrog"
! !
@@ -1431,6 +1456,14 @@
!MethodRewriter methodsFor:'private'!
+actionInProgress: aBoolean
+
+ self actionInProgressHolder value: aBoolean.
+ self windowGroup processEvents.
+
+ "Created: / 12-12-2007 / 10:06:16 / janfrog"
+!
+
doSearchPattern: pattern withResultDo: block
| matchingMethods |
@@ -1517,30 +1550,33 @@
methods
methods notEmptyOrNil ifTrue:[^ methods].
- ^self methodsFor: classes
+ ^self methodsForClasses
"Modified: / 21-07-2007 / 06:24:07 / janfrog"
"Modified: / 05-07-2011 / 14:50:43 / cg"
!
methods:aCollection
+ "to explicitly set the set of methods to be processed"
+
methods := aCollection
"Created: / 05-07-2011 / 14:50:52 / cg"
!
-methodsFor: aColletion
-
- ^classes
- inject: Set new
- into:
- [:methods :cls|
- methods
- addAll: cls methodDictionary values;
- addAll: cls class methodDictionary values;
- yourself]
-
- "Created: / 21-07-2007 / 06:25:42 / janfrog"
+methodsForClasses
+ cachedMethodsFromClasses isNil ifTrue:[
+ cachedMethodsFromClasses :=
+ (classes
+ inject: OrderedCollection new
+ into:[:methods :cls|
+ methods
+ addAll: cls methodDictionary values;
+ addAll: cls class methodDictionary values;
+ yourself]
+ ) asArray.
+ ].
+ ^ cachedMethodsFromClasses
!
methodsMatchingPattern: searchPattern
@@ -1612,12 +1648,22 @@
withMethods: methods do: methodBlock finallyDo: finallyBlock
[
+ |numMethods|
+
+ numMethods := methods size.
+
self actionInProgress: true.
- methods asArray keysAndValuesDo:
- [:idx :mth|
- self info: mth selector storeString.
+ self progress: 0.
+
+ self methods asArray keysAndValuesDo:[:idx :mth|
+ numMethods > 100 ifTrue:[
+ self info: mth mclass name.
+ ] ifFalse:[
+ self info: mth selector storeString.
+ ].
methodBlock value: mth.
- self progress: ((100 / methods size) * idx) rounded].
+ self progress: ((100 / methods size) * idx) rounded
+ ].
finallyBlock value
] ensure:[
"/self actionInProgress: false.
@@ -1649,11 +1695,15 @@
!MethodRewriter class methodsFor:'documentation'!
+version
+ ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.25 2015-05-11 15:25:48 cg Exp $'
+!
+
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.24 2015-05-11 13:18:55 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.25 2015-05-11 15:25:48 cg Exp $'
!
version_SVN
- ^ '$Id: Tools__MethodRewriter.st,v 1.24 2015-05-11 13:18:55 cg Exp $'
+ ^ '$Id: Tools__MethodRewriter.st,v 1.25 2015-05-11 15:25:48 cg Exp $'
! !