通过单次调用变量arity方法替换大量类似的方法调用

时间:2017-10-08 21:22:09

标签: java intellij-idea structural-search

我有一大堆这样的方法调用:

thing.doOneThing(a);
thing.doOneThing(b);
thing.doOneThing(c);
thing.doOneThing(d);
// ... etc

但是Thing类有一个等效的doManyThings方法,所以这可以改写为:

thing.doManyThings(a, b, c, d /* etc */);

在intellij中进行重构的正确方法是什么?

我一直在使用结构替换:

  • $t$.doOneThing($a$); $t$.doOneThing($b$);替换为$t$.doManyThings($a$, $b$);
  • $t$.doManyThings($a$); $t$.doOneThing($b$);$a$(具有无限多重性)替换为$t$.doManyThings($a$, $b$);
  • $t$.doManyThings($a$); $t$.doManyThings($b$);
  • 替换为$a$(具有无限多重性的$b$$t$.doManyThings($a$, $b$);

我必须一遍又一遍地继续做最后一步,因为它会合并成对的匹配语句,所以这只是每次调用doManyThings的次数减半,而且需要做几次将它们全部合并。

这比它应该的感觉更难 - 请你能指出我实现这一目标的超级明显更好的方法吗? :)

1 个答案:

答案 0 :(得分:0)

就个人而言,我会写一个正则表达式来替换所有字符串“thing.doOneThing(”用逗号(,)和另一个替换所有字符串“); \ n”到没有(或者反过来,你可以如果您在文件中有更多您不想修改的代码,也可以在选定区域执行此操作。根据您采用的方法,您将有一个额外的前导/尾随逗号,但在此之后,您将拥有一个以逗号分隔的所有参数的列表。然后,您可以通过对doManyThings方法的单个调用替换所有这些调用,您将粘贴以逗号分隔的参数列表。