Intellij结构搜索和替换所有形式的if语句

时间:2018-02-06 23:14:15

标签: java intellij-idea structural-search

我写了这样的搜索:

preparedStatement = connect.prepareStatement($sql$);
$code1$;
$resultSet$ = preparedStatement.executeQuery(); 
$code2$;
if ($resultSet$.next()) {
    $code3$;
}

这样的替换:

try (PreparedStatement preparedStatement = connect.prepareStatement($sql$)) {
    $code1$;
    try (ResultSet $resultSet$ = preparedStatement.executeQuery()) {
        $code2$;
        if ($resultSet$.next()) {
            $code3$;
        }
    }
}

当我运行它时,它会找到具有if { foo } else { bar}结构的代码。我对此很好,但问题是如果我替换它会删除else { bar }部分。我希望这个搜索/替换能够合理地使用else语句,多个else-ifs或这些语句的任何混合语句。有没有办法通过一次搜索和替换来做到这一点?

我尝试更改搜索中的if以获得其他问题并解决了问题,但之后它会跳过只有if而没有else的代码。

1 个答案:

答案 0 :(得分:1)

目前无法通过单一结构搜索&更换。但是你可以用两个来做。您已经拥有了使用和if查找else的模式。要查找没有if分支的else,您可以使用如下模式:

PreparedStatement $preparedStatement$ = $connect$.prepareStatement($sql$);
$code1$;
$resultSet$ = $preparedStatement$.executeQuery(); 
$code2$;
if ($resultSet$.next()) {
    $code3$;
} else $nothing$

$nothing$变量上的约束(在编辑变量按钮下)是:
 最小/最大出现次数:0, 0

使用省略else分支的替换模式:

try (PreparedStatement $preparedStatement$ = $connect$.prepareStatement($sql$)) {
    $code1$;
    try (ResultSet $resultSet$ = $preparedStatement$.executeQuery()) {
        $code2$;
        if ($resultSet$.next()) {
            $code3$;
        }
    }
}