Considérons l'exemple complet suivant d'une classe de style Builder.IntelliJ Structural Search ne remplace pas tous les appels de méthode dans une interface en chaîne/fluide
package com.derp;
class MyBuilder {
public MyBuilder set(String key, Object val) {
return this;
}
public MyBuilder setFoo(Object val) {
return this;
}
public MyBuilder setBar(Object val) {
return this;
}
public MyBuilder setBaz(Object val) {
return this;
}
}
public class Main {
public static void main(String[] args) {
// ** Example 1
MyBuilder a = new MyBuilder();
a.set("foo", 1);
a.set("bar", 2);
a.set("baz", 3);
// ** Example 2
MyBuilder b = new MyBuilder()
.set("foo", 1)
.set("bar", 2)
.set("baz", 3);
}
}
Utilisation de la recherche structurelle de IntelliJ Je voudrais factoriser invocations de méthode de la forme set("foo", value)
-setFoo(value)
partout où elle est invoquée sur une certaine classe/interface, pour tous les littéraux de chaîne (pas seulement « foo »).
Cela ne fonctionne que très légèrement avec une chaîne d'appels de méthode (AKA, une interface "fluide"), dans laquelle la méthode set()
en question renvoie this
.
Dans la principale méthode ci-dessus, ce que j'ai étiquetée comme Exemple 1 obtient correctement remaniée avec, mais Exemple 2 se termine comme ça, ce qui est utile:
MyBuilder b = new MyBuilder()
.set("foo", 1)
.set("bar", 2).setBaz(3);
J'ai besoin set("foo", 1)
et set("bar", 2)
à mettre à jour ici aussi.
peut gérer IntelliJ ce cas d'utilisation?
Ci-dessous se trouvent les détails des options que j'ai passées dans Structural Search and Replace. J'ai essayé de peaufiner les options autour de "nombre d'occurrences" mais malheureusement je n'ai pas trouvé d'option qui fonctionne. Voici les détails du modèle.
modèle de recherche: $Builder$.set($Key$, $Val$)
modèle de remplacement: $Builder$.set$Name$($Val$)
Variables:
$Builder$
Type d'expression (regexp): com\.derp\.MyBuilder
$Key$
Type d'expression (regexp): java\.lang\.String
$Name$
texte Script: Key.getText().replace("\"", "").capitalize()
S'il vous plaît suivez ce numéro https://youtrack.jetbrains.com/issue/IDEA-178110 – Andrey