Tools__MethodRewriter.st
branchjv
changeset 15634 fb1ac619f9c3
parent 15566 184cea584be5
parent 15631 b034f8b18413
child 15665 86f15e4dcebf
equal deleted inserted replaced
15629:1adff41f5fd0 15634:fb1ac619f9c3
       
     1 "{ Encoding: utf8 }"
       
     2 
     1 "
     3 "
     2  Copyright (c) 2007-2010 Jan Vrany, SWING Research Group, Czech Technical University in Prague
     4  Copyright (c) 2007-2010 Jan Vrany, SWING Research Group, Czech Technical University in Prague
     3  Copyright (c) 2009-2010 eXept Software AG
     5  Copyright (c) 2009-2010 eXept Software AG
     4 
     6 
     5  Permission is hereby granted, free of charge, to any person
     7  Permission is hereby granted, free of charge, to any person
    27 
    29 
    28 "{ NameSpace: Tools }"
    30 "{ NameSpace: Tools }"
    29 
    31 
    30 ApplicationModel subclass:#MethodRewriter
    32 ApplicationModel subclass:#MethodRewriter
    31 	instanceVariableNames:'replaceTextView methods classes packages searchTextView
    33 	instanceVariableNames:'replaceTextView methods classes packages searchTextView
    32 		actionInProgresHolder infoHolder progressHolder
    34 		actionInProgressHolder infoHolder progressHolder
    33 		templateSearchPatternHolder templateReplacePatternHolder
    35 		templateSearchPatternHolder templateReplacePatternHolder
    34 		selectedTemplateIndex templates selectedTabIndex
    36 		selectedTemplateIndex templates selectedTabIndex
    35 		selectedClassesHolder selectedRuleIndex rules
    37 		selectedClassesHolder selectedRuleIndex rules
    36 		ruleReplacePatternHolder ruleSearchPatternHolder
    38 		ruleReplacePatternHolder ruleSearchPatternHolder
    37 		ruleSearchAndReplacePatternHolder ruleForRewriteOrNilForAdHoc
    39 		ruleSearchAndReplacePatternHolder ruleForRewriteOrNilForAdHoc
    38 		adHocFindAndReplaceVisibleHolder ruleNameHolder'
    40 		adHocFindAndReplaceVisibleHolder ruleNameHolder
       
    41 		isMethodPatternHolder classesInfoTextHolder
       
    42 		cachedMethodsFromClasses'
    39 	classVariableNames:''
    43 	classVariableNames:''
    40 	poolDictionaries:''
    44 	poolDictionaries:''
    41 	category:'Interface-MethodRewriter'
    45 	category:'Interface-Tools'
    42 !
    46 !
    43 
    47 
    44 !MethodRewriter class methodsFor:'documentation'!
    48 !MethodRewriter class methodsFor:'documentation'!
    45 
    49 
    46 copyright
    50 copyright
   165     "
   169     "
   166      self templates
   170      self templates
   167     "
   171     "
   168 
   172 
   169     "Created: / 12-12-2007 / 11:03:32 / janfrog"
   173     "Created: / 12-12-2007 / 11:03:32 / janfrog"
       
   174 ! !
       
   175 
       
   176 !MethodRewriter class methodsFor:'help specs'!
       
   177 
       
   178 flyByHelpSpec
       
   179     "This resource specification was automatically generated
       
   180      by the UIHelpTool of ST/X."
       
   181 
       
   182     "Do not manually edit this!! If it is corrupted,
       
   183      the UIHelpTool may not be able to read the specification."
       
   184 
       
   185     "
       
   186      UIHelpTool openOnClass:Tools::MethodRewriter    
       
   187     "
       
   188 
       
   189     <resource: #help>
       
   190 
       
   191     ^ super helpSpec addPairsFrom:#(
       
   192 
       
   193 #isMethodPattern
       
   194 'The patterns are applied to the method''s whole source (including selector)\as opposed to the code''s syntax tree nodes.\(read the pattern help on this)'
       
   195 
       
   196 #doSearchAction
       
   197 'Searches for matching methods and opens a browser on those.'
       
   198 
       
   199 #doReplaceAction
       
   200 'Searches for matching methods, generates the new code and presents a list of changes.\This list allows for inspection and individual selection of changes to be applied'
       
   201 
       
   202 )
   170 ! !
   203 ! !
   171 
   204 
   172 !MethodRewriter class methodsFor:'interface specs'!
   205 !MethodRewriter class methodsFor:'interface specs'!
   173 
   206 
   174 classesSpec
   207 classesSpec
   205              translateLabel: true
   238              translateLabel: true
   206              adjust: left
   239              adjust: left
   207            )
   240            )
   208           (SelectionInListModelViewSpec
   241           (SelectionInListModelViewSpec
   209              name: 'ClassesList'
   242              name: 'ClassesList'
   210              layout: (LayoutFrame 0 0 30 0 0 1 -30 1)
   243              layout: (LayoutFrame 0 0 30 0 0 1 -60 1)
   211              model: selectedClassesHolder
   244              model: selectedClassesHolder
   212              hasHorizontalScrollBar: true
   245              hasHorizontalScrollBar: true
   213              hasVerticalScrollBar: true
   246              hasVerticalScrollBar: true
   214              listModel: classes
   247              listModel: classes
   215              multipleSelectOk: true
   248              multipleSelectOk: true
   220                canDropSelector: canDropClasses:
   253                canDropSelector: canDropClasses:
   221                dropArgument: nil
   254                dropArgument: nil
   222                dropSelector: doDropClasses:
   255                dropSelector: doDropClasses:
   223                dragArgument: nil
   256                dragArgument: nil
   224              )
   257              )
       
   258            )
       
   259           (LabelSpec
       
   260              name: 'ClassInfoLabel'
       
   261              layout: (LayoutFrame 0 0 -60 1 0 1 -30 1)
       
   262              translateLabel: true
       
   263              labelChannel: classesInfoTextHolder
       
   264              adjust: left
   225            )
   265            )
   226           (HorizontalPanelViewSpec
   266           (HorizontalPanelViewSpec
   227              name: 'HorizontalPanel1'
   267              name: 'HorizontalPanel1'
   228              layout: (LayoutFrame 0 0 -30 1 -16 1 0 1)
   268              layout: (LayoutFrame 0 0 -30 1 -16 1 0 1)
   229              horizontalLayout: center
   269              horizontalLayout: center
   417          bounds: (Rectangle 0 0 418 294)
   457          bounds: (Rectangle 0 0 418 294)
   418        )
   458        )
   419        component: 
   459        component: 
   420       (SpecCollection
   460       (SpecCollection
   421          collection: (
   461          collection: (
       
   462           (ViewSpec
       
   463              name: 'MethodPatternBox'
       
   464              layout: (LayoutFrame 0 0 0 0 0 1 30 0)
       
   465              component: 
       
   466             (SpecCollection
       
   467                collection: (
       
   468                 (CheckBoxSpec
       
   469                    label: 'Method Pattern'
       
   470                    name: 'CheckBox1'
       
   471                    layout: (LayoutFrame 0 0 8 0 136 0 30 0)
       
   472                    activeHelpKey: isMethodPattern
       
   473                    model: isMethodPatternHolder
       
   474                    translateLabel: true
       
   475                  )
       
   476                 )
       
   477               
       
   478              )
       
   479            )
   422           (VariableVerticalPanelSpec
   480           (VariableVerticalPanelSpec
   423              name: 'FindAndReplacePanel'
   481              name: 'FindAndReplacePanel'
   424              layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
   482              layout: (LayoutFrame 0 0 30 0 0 1 -30 1)
   425              visibilityChannel: adHocFindAndReplaceVisibleHolder
   483              visibilityChannel: adHocFindAndReplaceVisibleHolder
   426              showHandle: true
   484              showHandle: true
   427              snapMode: both
   485              snapMode: both
   428              component: 
   486              component: 
   429             (SpecCollection
   487             (SpecCollection
   481              )
   539              )
   482              handles: (Any 0.5 1.0)
   540              handles: (Any 0.5 1.0)
   483            )
   541            )
   484           (ViewSpec
   542           (ViewSpec
   485              name: 'ExecuteRuleBox'
   543              name: 'ExecuteRuleBox'
   486              layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
   544              layout: (LayoutFrame 0 0 30 0 0 1 -30 1)
   487              visibilityChannel: ruleExecutionVisibleHolder
   545              visibilityChannel: ruleExecutionVisibleHolder
   488              component: 
   546              component: 
   489             (SpecCollection
   547             (SpecCollection
   490                collection: (
   548                collection: (
   491                 (LabelSpec
   549                 (LabelSpec
   521             (SpecCollection
   579             (SpecCollection
   522                collection: (
   580                collection: (
   523                 (LabelSpec
   581                 (LabelSpec
   524                    label: 'Enjoy'
   582                    label: 'Enjoy'
   525                    name: 'Label1'
   583                    name: 'Label1'
   526                    layout: (LayoutFrame 5 0 -25 1 205 0 -5 1)
   584                    layout: (LayoutFrame 5 0 -25 1 255 0 -5 1)
   527                    visibilityChannel: actionInProgresHolder
   585                    xxvisibilityChannel: actionInProgressHolder
   528                    translateLabel: true
   586                    translateLabel: true
   529                    labelChannel: infoHolder
   587                    labelChannel: infoHolder
   530                    adjust: left
   588                    adjust: left
   531                  )
   589                  )
   532                 (ProgressIndicatorSpec
   590                 (ProgressIndicatorSpec
   533                    name: 'ProgressIndicator1'
   591                    name: 'ProgressIndicator1'
   534                    layout: (LayoutFrame 210 0 -25 1 -215 1 -5 1)
   592                    layout: (LayoutFrame 260 0 -25 1 -215 1 -5 1)
   535                    visibilityChannel: actionInProgresHolder
   593                    xxvisibilityChannel: actionInProgressHolder
   536                    model: progressHolder
   594                    model: progressHolder
   537                  )
   595                  )
   538                 (ActionButtonSpec
   596                 (ActionButtonSpec
   539                    label: 'Search'
   597                    label: 'Search'
   540                    name: 'Button2'
   598                    name: 'Button2'
   541                    layout: (LayoutFrame -210 1 -26 1 -110 1 -5 1)
   599                    layout: (LayoutFrame -210 1 -26 1 -110 1 -5 1)
       
   600                    activeHelpKey: doSearchAction
   542                    translateLabel: true
   601                    translateLabel: true
   543                    model: doSearchAction
   602                    model: doSearchAction
   544                  )
   603                  )
   545                 (ActionButtonSpec
   604                 (ActionButtonSpec
   546                    label: 'Rewrite'
   605                    label: 'Rewrite...'
   547                    name: 'Button1'
   606                    name: 'Button1'
   548                    layout: (LayoutFrame -105 1 -25 1 -5 1 -5 1)
   607                    layout: (LayoutFrame -105 1 -25 1 -5 1 -5 1)
       
   608                    activeHelpKey: doRewriteAction
   549                    translateLabel: true
   609                    translateLabel: true
   550                    model: doRewriteAction
   610                    model: doRewriteAction
   551                  )
   611                  )
   552                 )
   612                 )
   553               
   613               
   823     "Modified: / 12-12-2007 / 11:21:27 / janfrog"
   883     "Modified: / 12-12-2007 / 11:21:27 / janfrog"
   824 ! !
   884 ! !
   825 
   885 
   826 !MethodRewriter methodsFor:'accessing'!
   886 !MethodRewriter methodsFor:'accessing'!
   827 
   887 
   828 actionInProgress: aBoolean
       
   829 
       
   830     ^self actionInProgresHolder value: aBoolean
       
   831 
       
   832     "Created: / 12-12-2007 / 10:06:16 / janfrog"
       
   833 !
       
   834 
       
   835 classes
   888 classes
   836     ^ classes ifNil:[classes := List new]
   889     ^ classes ifNil:[classes := List new]
   837 
   890 
   838     "Created: / 20-07-2007 / 16:31:18 / janfrog"
   891     "Created: / 20-07-2007 / 16:31:18 / janfrog"
   839 !
   892 !
   840 
   893 
   841 classes: aCollection
   894 classes: aCollection
   842     classes := ((aCollection collect:[:cls|cls theNonMetaclass]) 
   895     self classes contents:((aCollection collect:[:cls|cls theNonMetaclass]) 
   843                     sort:[:a :b | a className < b className]) asList
   896                             sortBySelector:#name).
       
   897     self classesChanged
       
   898             
   844 
   899 
   845     "Created: / 20-07-2007 / 16:31:18 / janfrog"
   900     "Created: / 20-07-2007 / 16:31:18 / janfrog"
   846     "Modified: / 12-12-2007 / 09:47:01 / janfrog"
   901     "Modified: / 12-12-2007 / 09:47:01 / janfrog"
   847 !
   902 !
   848 
   903 
   852 
   907 
   853     "Created: / 12-12-2007 / 10:00:50 / janfrog"
   908     "Created: / 12-12-2007 / 10:00:50 / janfrog"
   854 !
   909 !
   855 
   910 
   856 progress: anInteger
   911 progress: anInteger
   857 
   912     self actionInProgressHolder value:true.
   858     self progressHolder value: anInteger
   913     self progressHolder value: anInteger
   859 
   914 
   860     "Created: / 12-12-2007 / 10:01:03 / janfrog"
   915     "Created: / 12-12-2007 / 10:01:03 / janfrog"
   861 !
   916 !
   862 
   917 
   986     changes := ChangeSet new name:'Rewrite Changes'.    
  1041     changes := ChangeSet new name:'Rewrite Changes'.    
   987 
  1042 
   988     methodsMatching isEmptyOrNil ifTrue:[^Dialog warn:'No methods matching'].
  1043     methodsMatching isEmptyOrNil ifTrue:[^Dialog warn:'No methods matching'].
   989 
  1044 
   990     self withMethods: methodsMatching do:[:mth|
  1045     self withMethods: methodsMatching do:[:mth|
   991         | newTree newSource change |
  1046         | rewriter newTree newSource change |
   992 
  1047 
   993         newTree := ParseTreeSourceRewriter new
  1048         rewriter := ParseTreeSourceRewriter new.
   994                     replace: self searchPattern 
  1049         (self isMethodPatternHolder value) ifTrue:[
   995                     with: self replacePattern;
  1050             rewriter replace: self searchPattern with: self replacePattern
   996                     executeTree: mth parseTree;
  1051         ] ifFalse:[
   997                     tree.
  1052             rewriter replaceMethod: self searchPattern with: self replacePattern
   998 
  1053         ].
   999         change := InteractiveAddMethodChange compile: newTree newSource in:mth mclass classified:mth category.
  1054         newTree := rewriter
       
  1055                         executeTree: mth parseTree;
       
  1056                         tree.
       
  1057 
       
  1058         change := InteractiveAddMethodChange compile: newTree newSource in:(mth mclass ? mth getMclass) classified:mth category.
  1000 
  1059 
  1001         "/ collect in order to have only one change in the undo-list (instead of many)
  1060         "/ collect in order to have only one change in the undo-list (instead of many)
  1002         changes add: change.
  1061         changes add: change.
  1003 
  1062 
  1004 "/        mth mclass 
  1063 "/        mth mclass 
  1078     "Created: / 12-12-2007 / 11:14:25 / janfrog"
  1137     "Created: / 12-12-2007 / 11:14:25 / janfrog"
  1079 !
  1138 !
  1080 
  1139 
  1081 removeSeletedClassesAction
  1140 removeSeletedClassesAction
  1082 
  1141 
  1083     self classes removeAll: self selectedClasses
  1142     self classes removeAll: self selectedClasses.
       
  1143     classes changed:#content.
       
  1144     self classesChanged.
  1084 
  1145 
  1085     "Created: / 12-12-2007 / 12:05:15 / janfrog"
  1146     "Created: / 12-12-2007 / 12:05:15 / janfrog"
  1086 !
  1147 !
  1087 
  1148 
  1088 useAsRuleAction
  1149 useAsRuleAction
  1103     "Created: / 12-12-2007 / 11:14:15 / janfrog"
  1164     "Created: / 12-12-2007 / 11:14:15 / janfrog"
  1104 ! !
  1165 ! !
  1105 
  1166 
  1106 !MethodRewriter methodsFor:'aspects'!
  1167 !MethodRewriter methodsFor:'aspects'!
  1107 
  1168 
  1108 actionInProgresHolder
  1169 actionInProgressHolder
  1109     actionInProgresHolder isNil ifTrue:[
  1170     actionInProgressHolder isNil ifTrue:[
  1110         actionInProgresHolder := true asValue.
  1171         actionInProgressHolder := false asValue.
  1111     ].
  1172     ].
  1112     ^ actionInProgresHolder.
  1173     ^ actionInProgressHolder.
  1113 
  1174 
  1114     "Created: / 12-12-2007 / 10:00:05 / janfrog"
  1175     "Created: / 12-12-2007 / 10:00:05 / janfrog"
  1115 !
  1176 !
  1116 
  1177 
  1117 adHocFindAndReplaceVisibleHolder
  1178 adHocFindAndReplaceVisibleHolder
  1119         adHocFindAndReplaceVisibleHolder := true asValue.
  1180         adHocFindAndReplaceVisibleHolder := true asValue.
  1120     ].
  1181     ].
  1121     ^ adHocFindAndReplaceVisibleHolder.
  1182     ^ adHocFindAndReplaceVisibleHolder.
  1122 !
  1183 !
  1123 
  1184 
       
  1185 classesInfoTextHolder
       
  1186     classesInfoTextHolder isNil ifTrue:[
       
  1187         classesInfoTextHolder := '' asValue.
       
  1188     ].
       
  1189     ^ classesInfoTextHolder.
       
  1190 !
       
  1191 
  1124 howToUseRewriteToolURL
  1192 howToUseRewriteToolURL
  1125     ^ HTMLDocumentFrame documentFileFor:'help/Browser/RewriteToolHelp.html'
  1193     ^ HTMLDocumentFrame documentFileFor:'help/Browser/RewriteToolHelp.html'
  1126 !
  1194 !
  1127 
  1195 
  1128 infoHolder
  1196 infoHolder
  1133 
  1201 
  1134     "Created: / 12-12-2007 / 10:00:05 / janfrog"
  1202     "Created: / 12-12-2007 / 10:00:05 / janfrog"
  1135     "Modified: / 12-12-2007 / 11:40:17 / janfrog"
  1203     "Modified: / 12-12-2007 / 11:40:17 / janfrog"
  1136 !
  1204 !
  1137 
  1205 
       
  1206 isMethodPatternHolder
       
  1207     isMethodPatternHolder isNil ifTrue:[
       
  1208         isMethodPatternHolder := false asValue
       
  1209     ].
       
  1210     ^ isMethodPatternHolder.
       
  1211 !
       
  1212 
  1138 progressHolder
  1213 progressHolder
  1139     progressHolder isNil ifTrue:[
  1214     progressHolder isNil ifTrue:[
  1140         progressHolder := 0 asValue
  1215         progressHolder := 0 asValue
  1141     ].
  1216     ].
  1142     ^ progressHolder.
  1217     ^ progressHolder.
  1264     ].
  1339     ].
  1265     ^ holder.
  1340     ^ holder.
  1266 ! !
  1341 ! !
  1267 
  1342 
  1268 !MethodRewriter methodsFor:'change & update'!
  1343 !MethodRewriter methodsFor:'change & update'!
       
  1344 
       
  1345 classesChanged
       
  1346     cachedMethodsFromClasses := nil. "/ flush
       
  1347     methods := nil.
       
  1348 
       
  1349     self classesInfoTextHolder 
       
  1350         value:(((classes size == 1) ifTrue:['%1 class / %2 method(s)'] ifFalse:['%1 classes / %2 methods']) 
       
  1351                     bindWith:classes size                    
       
  1352                     with:self methods size)
       
  1353 !
  1269 
  1354 
  1270 selectedRuleIndexChanged
  1355 selectedRuleIndexChanged
  1271     |selectedRuleSpec|
  1356     |selectedRuleSpec|
  1272 
  1357 
  1273     selectedRuleSpec := self selectedRuleSpec.
  1358     selectedRuleSpec := self selectedRuleSpec.
  1317 !
  1402 !
  1318 
  1403 
  1319 doDropClasses: dropContext
  1404 doDropClasses: dropContext
  1320     "I accept classes, methods and packages"
  1405     "I accept classes, methods and packages"
  1321 
  1406 
  1322     | droppedProjects droppedClasses newClasses |
  1407     | droppedProjects droppedClasses newClasses classesAlready|
  1323 
  1408 
  1324     droppedProjects := dropContext dropObjects 
  1409     droppedProjects := dropContext dropObjects 
  1325                     select:[:obj| obj isProjectObject]
  1410                     select:[:obj| obj isProjectObject]
  1326                     thenCollect:[:obj | obj theObject].  
  1411                     thenCollect:[:obj | obj theObject].  
  1327 
  1412 
  1340 
  1425 
  1341     droppedProjects do:[:eachPackage |
  1426     droppedProjects do:[:eachPackage |
  1342         droppedClasses addAll:(Smalltalk allClassesInPackage:eachPackage)
  1427         droppedClasses addAll:(Smalltalk allClassesInPackage:eachPackage)
  1343     ].
  1428     ].
  1344 
  1429 
  1345     newClasses := droppedClasses reject:[:cls | self classes includes:cls].
  1430     classesAlready := self classes asSet.
       
  1431     newClasses := droppedClasses reject:[:cls | classesAlready includes:cls].
       
  1432 
  1346     self classes 
  1433     self classes 
  1347         addAll: newClasses;
  1434         addAll: newClasses;
  1348         changed:#content.
  1435         sortBySelector:#name.
       
  1436     self classesChanged
  1349 
  1437 
  1350     "Created: / 20-07-2007 / 16:58:16 / janfrog"
  1438     "Created: / 20-07-2007 / 16:58:16 / janfrog"
  1351 ! !
  1439 ! !
  1352 
  1440 
  1353 !MethodRewriter methodsFor:'hooks'!
  1441 !MethodRewriter methodsFor:'hooks'!
  1365 
  1453 
  1366     "Created: / 20-07-2007 / 15:55:29 / janfrog"
  1454     "Created: / 20-07-2007 / 15:55:29 / janfrog"
  1367 ! !
  1455 ! !
  1368 
  1456 
  1369 !MethodRewriter methodsFor:'private'!
  1457 !MethodRewriter methodsFor:'private'!
       
  1458 
       
  1459 actionInProgress: aBoolean
       
  1460 
       
  1461     self actionInProgressHolder value: aBoolean.
       
  1462     self windowGroup processEvents.
       
  1463 
       
  1464     "Created: / 12-12-2007 / 10:06:16 / janfrog"
       
  1465 !
  1370 
  1466 
  1371 doSearchPattern: pattern withResultDo: block
  1467 doSearchPattern: pattern withResultDo: block
  1372 
  1468 
  1373     | matchingMethods |
  1469     | matchingMethods |
  1374 
  1470 
  1378     ].
  1474     ].
  1379 
  1475 
  1380     matchingMethods := Set new.
  1476     matchingMethods := Set new.
  1381     self
  1477     self
  1382         withMethodsDo:[:mthd| 
  1478         withMethodsDo:[:mthd| 
  1383             | tree |
  1479             | tree searcher |
  1384             tree := mthd parseTree.
  1480             tree := mthd parseTree.
  1385             tree 
  1481             tree 
  1386                 ifNil:[
  1482                 ifNil:[
  1387                     Transcript showCR:'MethodRewriter: parse tree error in ',mthd whoString.
  1483                     Transcript showCR:'MethodRewriter: parse tree error in ',mthd whoString.
  1388                     self breakPoint: #jv
  1484                     self breakPoint: #jv
  1389                 ] 
  1485                 ] 
  1390                 ifNotNil:[
  1486                 ifNotNil:[
  1391                     (ParseTreeSearcher new)
  1487                     searcher := ParseTreeSearcher new.
  1392                         matches:pattern do:[:aNode :answer | matchingMethods add:mthd ];
  1488                     (self isMethodPatternHolder value)
  1393                        executeTree: tree
  1489                         ifTrue:[
       
  1490                             searcher matchesMethod:pattern do:[:aNode :answer | matchingMethods add:mthd ]
       
  1491                         ]
       
  1492                         ifFalse:[
       
  1493                             searcher matches:pattern do:[:aNode :answer | matchingMethods add:mthd ]
       
  1494                         ].
       
  1495                     searcher executeTree: tree
  1394                 ]
  1496                 ]
  1395         ]
  1497         ]
  1396         finallyDo:[
  1498         finallyDo:[
  1397             block value: matchingMethods
  1499             block value: matchingMethods
  1398         ]
  1500         ]
  1446 !
  1548 !
  1447 
  1549 
  1448 methods
  1550 methods
  1449     methods notEmptyOrNil ifTrue:[^ methods].
  1551     methods notEmptyOrNil ifTrue:[^ methods].
  1450 
  1552 
  1451     ^self methodsFor: classes
  1553     ^self methodsForClasses
  1452 
  1554 
  1453     "Modified: / 21-07-2007 / 06:24:07 / janfrog"
  1555     "Modified: / 21-07-2007 / 06:24:07 / janfrog"
  1454     "Modified: / 05-07-2011 / 14:50:43 / cg"
  1556     "Modified: / 05-07-2011 / 14:50:43 / cg"
  1455 !
  1557 !
  1456 
  1558 
  1457 methods:aCollection
  1559 methods:aCollection
       
  1560     "to explicitly set the set of methods to be processed"
       
  1561 
  1458     methods := aCollection
  1562     methods := aCollection
  1459 
  1563 
  1460     "Created: / 05-07-2011 / 14:50:52 / cg"
  1564     "Created: / 05-07-2011 / 14:50:52 / cg"
  1461 !
  1565 !
  1462 
  1566 
  1463 methodsFor: aColletion
  1567 methodsForClasses
  1464 
  1568     cachedMethodsFromClasses isNil ifTrue:[
  1465     ^classes 
  1569         cachedMethodsFromClasses :=
  1466         inject: Set new
  1570             (classes
  1467         into:
  1571                 inject: OrderedCollection new
  1468             [:methods :cls|
  1572                 into:[:methods :cls|
  1469             methods
  1573                     methods
  1470                 addAll: cls methodDictionary values;
  1574                         addAll: cls methodDictionary values;
  1471                 addAll: cls class methodDictionary values;
  1575                         addAll: cls class methodDictionary values;
  1472                 yourself]
  1576                         yourself]
  1473 
  1577             ) asArray.
  1474     "Created: / 21-07-2007 / 06:25:42 / janfrog"
  1578     ].
       
  1579     ^ cachedMethodsFromClasses
  1475 !
  1580 !
  1476 
  1581 
  1477 methodsMatchingPattern: searchPattern
  1582 methodsMatchingPattern: searchPattern
  1478     |methods matchingMethods|
  1583     |methods matchingMethods|
  1479 
  1584 
  1541 !
  1646 !
  1542 
  1647 
  1543 withMethods: methods do: methodBlock finallyDo: finallyBlock
  1648 withMethods: methods do: methodBlock finallyDo: finallyBlock
  1544 
  1649 
  1545     [
  1650     [
       
  1651         |numMethods|
       
  1652 
       
  1653         numMethods := methods size.
       
  1654 
  1546         self actionInProgress: true.
  1655         self actionInProgress: true.
  1547         methods asArray keysAndValuesDo:
  1656         self progress: 0.
  1548             [:idx :mth|
  1657 
  1549             self info: mth selector storeString.
  1658         self methods asArray keysAndValuesDo:[:idx :mth|
       
  1659             numMethods > 100 ifTrue:[
       
  1660                 self info: mth mclass name.
       
  1661             ] ifFalse:[
       
  1662                 self info: mth selector storeString.
       
  1663             ].
  1550             methodBlock value: mth.
  1664             methodBlock value: mth.
  1551             self progress: ((100 / methods size) * idx) rounded].
  1665             self progress: ((100 / methods size) * idx) rounded
       
  1666         ].
  1552         finallyBlock value
  1667         finallyBlock value
  1553     ] ensure:[
  1668     ] ensure:[
  1554         "/self actionInProgress: false.
  1669         "/self actionInProgress: false.
  1555         self progress: 0.
  1670         self progress: 0.
  1556         self info: ''
  1671         self info: ''
  1578     "Modified: / 12-12-2007 / 10:45:20 / janfrog"
  1693     "Modified: / 12-12-2007 / 10:45:20 / janfrog"
  1579 ! !
  1694 ! !
  1580 
  1695 
  1581 !MethodRewriter class methodsFor:'documentation'!
  1696 !MethodRewriter class methodsFor:'documentation'!
  1582 
  1697 
       
  1698 version
       
  1699     ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.25 2015-05-11 15:25:48 cg Exp $'
       
  1700 !
       
  1701 
  1583 version_CVS
  1702 version_CVS
  1584     ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.23 2015-02-24 18:13:14 cg Exp $'
  1703     ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodRewriter.st,v 1.25 2015-05-11 15:25:48 cg Exp $'
  1585 !
  1704 !
  1586 
  1705 
  1587 version_SVN
  1706 version_SVN
  1588     ^ '$Id: Tools__MethodRewriter.st,v 1.23 2015-02-24 18:13:14 cg Exp $'
  1707     ^ '$Id: Tools__MethodRewriter.st,v 1.25 2015-05-11 15:25:48 cg Exp $'
  1589 ! !
  1708 ! !
  1590 
  1709