class: Tools::MethodRewriter
authorClaus Gittinger <cg@exept.de>
Mon, 11 May 2015 17:25:48 +0200
changeset 15631 b034f8b18413
parent 15630 903745e4c780
child 15632 7e30b48cebfd
class: Tools::MethodRewriter class definition added: #classesChanged #classesInfoTextHolder #methodsForClasses UI improvement: show number of classes/methods.
Tools__MethodRewriter.st
--- 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 $'
 ! !