In unserer Codebasis, suche ich nach anonymen Unterklassen einer bestimmten Klasse, die eine bestimmte Methode implementieren und keine anderen Methoden oder Felder haben. Diese können in einen Lambda-Ausdruck konvertiert werden und die Notwendigkeit für diese anonyme Unterklasse beseitigen.IDEA strukturelle Suche nach Klassen implementieren eine bestimmte Methode und keine andere
Die Suchmaske ich mit wie folgt aussieht kam:
istnew SimpleListSubstitution<$Type$>() {
@Modifier Iterable<$Type$> getItems() {
return $EXPRESSION$;
}
}
Der Ersatz Vorlage folgt aus:
SimpleListSubstitution.forItems(() -> $EXPRESSION$)
Nun dieser Ausdruck alle Instanzen finde ich Refactoring wollen, aber es zusätzlich findet Unterklassen, die auch andere Methoden implementieren (Hilfsmethoden oder überschrieben von der Oberklasse).
Als Beispiel möchte ich es die Unterklasse in diesem Code zu finden:
template.put("pathToRoot", SimpleListSubstitution.forItems(() -> listOfPagesToRoot));
Aber ich es das finden, um nicht möchten:
template.put("pathToRoot", new SimpleListSubstitution<Page>() {
@Override
protected Iterable<Page> getItems() {
return listOfPagesToRoot;
}
});
Dies wird in den folgenden umgewandelt werden Unterklasse in diesem Code auf Grund der zusätzlichen putAdditionalSubstitutions
Methode:
template.put("children", new SimpleListSubstitution<Page>() {
@Override
protected Iterable<Page> getItems() {
return getChildren(page, booleanFeatureName);
}
@Override
protected void putAdditionalSubstitutions(Template template) {
template.put("link", /*...*/);
}
});
gibt es eine Möglichkeit e xpress "keine anderen Methoden" im Suchen/Ersetzen-Dialog?
Momentan sehe ich nur den Ansatz, jeden Treffer in der Ansicht Suchen zu überprüfen und die unerwünschten Treffer zu entfernen und den Rest zu ersetzen. Da wir diese und ähnliche Refactorings einige Male anwenden müssen (z. B. um gleichzeitig geschriebenen neuen Code zu behandeln), wird dies ziemlich mühsam.
Ja! Das funktioniert. Man muss darauf achten, dass alle Variableneinstellungen gesetzt werden (zuerst wurde die Anzahl der Parameter verpasst, wodurch nur einige der Übereinstimmungen unterdrückt wurden). Vielen Dank! –