有没有一种方法可以通过使用Intellij添加外部方法调用来重构?

时间:2019-01-24 14:26:24

标签: java intellij-idea

我有这个:

Arrays.asList(from(A, 14), from(A, 21), ...

我需要的是

Arrays.asList(of(from(A, 14), 1), of(from(A, 21), 2), ...

呼叫from(A, number)应该变成of(from(A, number), anotherNumber)

换句话说:我必须通过将这样的from()调用括在of()中并添加第二个参数来更新冗长的列表。理想情况下,第二个参数只会向上计数。

使用IntelliJ重构工具可以做到这一点吗? (而不是手动完成所有操作)

并且请注意:我并不是在要求工具推荐。我在问一个已知的工具是否支持特定的重构情况。

3 个答案:

答案 0 :(得分:2)

您可以突出显示from(并使用“选择下一个出现”热键。选择所有出现的位置后,只需将其替换为of(from。完成添加of后,您可以使用“ alt +左​​箭头键”将光标移至您要添加数字的位置,或通过突出显示{{1}来使用“选择下一个出现位置” }。

在Mac上,热键是“ CTRL + G”,在Windows \ Linux上是“ ALT + J”。这是热键https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf

的列表

它仍然有点手动,但要一步一步地做。

答案 1 :(得分:2)

您可以尝试以下操作:

  • 提取方法,其中替换了from(A, param)
  • 的重复项
  • 在提取的方法内部编写类似of(from(A, param), NNN)
  • 的内容
  • 内联方法
  • 用您需要的数字替换NNN(必须手动执行)

如果有一些公式可以基于anotherNumber计算number,则可以使用它代替NNN

答案 2 :(得分:2)

“结构上替换”可以满足您的某些需求。

  1. 选择Edit> Find> Replace Structurally...
  2. 输入from($a$, $b$)作为搜索模板
  3. 输入of(from($a$, $b$), i)作为替换模板
  4. 选择ScopeCurrent File(如果愿意,可以选择Selection
  5. Find
  6. Replace all

假设i未定义,那么您将面临很多错误。您可以使用F2遍历错误,并用所需的值替换未定义的i


奖金提示:在Mac上,在终端上运行seq 1 100 | pbcopy,将数字1-100放入剪贴板。然后,在IntelliJ中使用多个光标,单击“粘贴”。 1将粘贴在第一个光标上,2将粘贴在第二个光标上,等等。