重构 - 可折叠"如果"语句应该合并

时间:2017-08-01 03:33:07

标签: java eclipse intellij-idea refactoring automated-refactoring

我正在尝试清理我们的遗留代码,并注意到有很多条件代码可以合并。

示例 -

if (file != null) {
  if (file.isFile() || file.isDirectory()) {
    /* ... */
  }
}

这可以重构为

if (file != null && (file.isFile() || file.isDirectory())) { 
  /* ... */
}

手动执行此更改很痛苦。所以,我试图检查intelliji中的检查工具和模板重构,以帮助我进行批量代码重构。

无法找到这个eclipse IDE。

请建议,Intelliji / Eclipse中是否有此选项

2 个答案:

答案 0 :(得分:2)

在IntelliJ IDEA中,将文本光标放在第一个if关键字上,按 Alt + 输入并调用Merge nested 'if's

您还可以使用结构搜索&替换以批量执行此操作。使用以下搜索模式:

if ($a$) {
  if ($b$) {
    $statement$;
  } else $void$;
} else $void$;

点击Edit Variables...并将statement的最小和最大数量设置为0,∞。同时将void的最小和最大数量设置为0,0

使用以下替换模式:

if (($a$) && ($b$)) {
  $statement$;
}

请注意,在某些情况下,此替换将引入冗余括号,以防止更改代码的语义。稍后可以通过调用Run Inspection by Name并运行Unnecessary parentheses检查来再次删除它们。

答案 1 :(得分:2)

AutoRefactor Eclipse插件可以批量执行此操作。

请参阅http://autorefactor.org/html/samples.html并选择CollapseIfStatementSample.java。您可以在整个文件,包甚至项目上执行此操作。

还有一个重构来删除不必要的括号:SimplifyExpressionSample.java(参见例如第144行)。