Hi John, Thank you for your feedback and help!
I started a ProgressBarInstaller using your corrections. Unfortunately SmalltalkHub is not working for me right now but will check tomorrow and share the link. Best regards, Hernán 2015-12-08 13:56 GMT-03:00 John Brant <br...@refactoryworkers.com>: > On 12/7/2015 5:27 PM, Hernán Morales Durand wrote: > >> >> but now I am failing to see how to replace #collect: with >> #collect:thenDo: using the rewriter: >> >> http://ws.stfx.eu/MOWS947F000O >> > > You don't need to first search using the RBParseTreeSearcher. The > RBParseTreeRewriter works with search patterns. What your code is really > doing is searching for the literal pattern that it found from the > RBParseTreeSearcher in the FooClass>>foo: method: > > aString asFileReference entries > collect: [ : fileEntry | self openOnFileNamed: fileEntry fullName ] > > It then tries to replace it with the pattern: > > `@collection collect: `@arg1 > thenDo: [ : fileEntry | > index := index + 1. > JobProgress progress: (0.1 * index); > title: 'Procesing...', index asString ] > > However, since neither `@collection nor `@arg1 appear in your search > pattern, you get an error. > > Here's a version that works: > > | cm rewriteRule replacement | > cm := FooClass >> #foo:. > replacement := '`@collection collect: `@arg1 > thenDo: [ : fileEntry | > index := index + 1. > JobProgress progress: (0.1 * index); > title: ''Procesing...'', index asString ]'. > rewriteRule := RBParseTreeRewriter new > replace: '`@collection collect: `@arg1' > with: replacement. > rewriteRule executeTree: cm parseTree. > rewriteRule tree newSource > > > Essentially, I used the same search pattern you used, but I used it for > the RBParseTreeRewriter and removed all of the RBParseTreeSearcher code. If > you want to change all #collect: sends in a method, then you should > probably change `@aCollection and `@arg1 to ``@aCollection and ``@arg1. > > > John Brant > >