コードベースでは、特定のメソッドを実装し、他のメソッドやフィールドを持たないクラスの匿名サブクラスを探しています。これらをラムダ式に変換して、その無名サブクラスの必要性を取り除くことができます。IDEA特定のメソッドを実装しているクラスの構造検索で、他のメソッドはありません
SimpleListSubstitution.forItems(() -> $EXPRESSION$)
今、この表現は私がリファクタリングしたいすべてのインスタンスを見つけたが、さらにそれ:交換用のテンプレートはこれです
new SimpleListSubstitution<$Type$>() {
@Modifier Iterable<$Type$> getItems() {
return $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", /*...*/);
}
});
は、Eする方法はあります検索/置換ダイアログの「他の方法はありません」をxpressしますか?
現在、私はFindビューで各ヒットをチェックし、不要なヒットを取り除いて残りを置き換えるアプローチしか見ません。これと同様のリファクタリングを数回(例えば、同時に書かれた新しいコードを処理するために)適用する必要があるので、これはかなり手間がかかります。
あなたは、このような検索テンプレートを使用することができます
はい!これは機能します。実際には、すべての変数設定(パラメータの数が不足しているため、一致の一部しか表示されませんでした)を実際に設定する必要があります。ありがとうございました! –