The only problem is that it does a whole-method refactoring while it should only affect the node that triggered the deprecation. Else there could be wrong transformations if the same selector is used but only one of the implementations need to be rewritten, while if we are able to rewrite the exact sender, we can do it fully automatically.
I think using #sourceNodeExecuted we could do it like this: deprecated: anExplanationString rule: aRule | builder rewriteRule method context node | builder := RBCompositeRefactoryChange named: 'deprecation'. method := thisContext sender sender method. context := thisContext sender sender. node := context sourceNodeExecuted. rewriteRule := RBParseTreeRewriter new replace: aRule key with: aRule value. (rewriteRule executeTree: node copy) ifTrue: [ node replaceWith: rewriteRule tree. builder compile: method ast formattedCode in: method methodClass classified: method protocol ]. builder execute. And a question is if we need #formattedCode⦠all refactoring normally try to update white-space information. Need to check. Marcus