IDEA 结构搜索实现特定方法而不是其他方法的类



在我们的代码库中,我正在寻找给定类的匿名子类,这些子类实现一种特定方法并且没有其他方法或字段。这些可以转换为 lambda 表达式,并消除对该匿名子类的需求。

我想出的搜索模板如下所示:

new SimpleListSubstitution<$Type$>() {
@Modifier Iterable<$Type$> getItems() {
return $EXPRESSION$;
}
}

替换模板如下:

SimpleListSubstitution.forItems(() -> $EXPRESSION$)

现在这个表达式找到我要重构的所有实例,但除此之外,它还找到了也实现其他方法(帮助程序方法或从超类重写)的子类。

例如,我希望它在此代码中找到子类:

template.put("pathToRoot", new SimpleListSubstitution<Page>() {
@Override
protected Iterable<Page> getItems() {
return listOfPagesToRoot;
}
});

这将转换为以下内容:

template.put("pathToRoot", SimpleListSubstitution.forItems(() -> listOfPagesToRoot));

但是由于额外的putAdditionalSubstitutions方法,我确实希望它不会在此代码中找到子类:

template.put("children", new SimpleListSubstitution<Page>() {
@Override
protected Iterable<Page> getItems() {
return getChildren(page, booleanFeatureName);
}
@Override
protected void putAdditionalSubstitutions(Template template) {
template.put("link", /*...*/);
}
});

有没有办法在搜索/替换对话框中表达"没有其他方法"?

目前,我只看到在"查找"视图中检查每个命中并删除不需要的命中并替换其余命中的方法。由于我们需要多次应用此重构和类似的重构(例如,处理并发编写的新代码),因此这变得非常费力。

您可以使用如下搜索模板:

new SimpleListSubstitution<$Type$>() {
@Override
protected Iterable<$Type$> getItems() {
return $EXPRESSION$;
}
$ReturnType$ $Method$($ParameterType$ $Parameter$);
}

使用以下变量设置:
最小Method:0,最大值:0
Parameter最小值:0,最大值:无限制

请注意,此模式尝试匹配其他方法,但由于Method设置为0出现次数,因此如果找到方法,匹配将失败。这样,只有未定义其他方法的类才会出现在搜索结果中。

相关内容

最新更新