重构 - 应合并可折叠 "if" 语句

Refactoring - Collapsible "if" statements should be merged

我正在尝试清理遗留代码,发现有很多 if 条件代码可以合并。

例子-

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

这可以重构为,

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

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

也找不到这个日食IDE。

请指教,Intelliji/Eclipse中是否有这个

的选项

在 IntelliJ IDEA 中将文本光标放在第一个 if 关键字上,按 Alt+Enter 并调用 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 检查再次删除。

AutoRefactor Eclipse 插件可以为您批量完成。

参见 http://autorefactor.org/html/samples.html 和 select CollapseIfStatementSample.java。您可以对整个文件、包甚至项目执行此操作。

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