public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
J'essaye de refactoriser la variable de classe value
, qui se produit en place. Cela signifie qu'aucune boîte de dialogue n'apparaît; J'appuie sur Entrée et il essaie de refactoriser l'ensemble du projet, y compris les commentaires et autres, y compris:
<%--<link href="<c:url value="../core/core.css" />" />--%>
dans un fichier .jsp. C'est bien trop «intelligent» pour essayer de refactoriser les commentaires qui correspondent à l'ensemble du projet. Cela entraîne souvent de nombreux risques de bogues et la refactorisation dans un environnement Java n'est plus sûre.
La même chose se produisait dans Intellij 12. Sérieusement, je n'ai pas besoin qu'Intellij recommande quoi que ce soit qui est considéré comme dangereux, ou quand on n'est pas sûr que ce soit la même chose!
Je peux exclure les refactorisations mais je n'ai pas le temps d'évaluer cinq "suggestions" à chaque fois. Cela augmente simplement le risque d'erreur humaine: la plupart du temps, j'appuie simplement sur Entrée, et les choses sont remaniées.
Le refactoring est également un problème majeur dans un environnement Java lorsqu'il tente parfois de remplacer des éléments dans des fichiers .js. Sérieusement, cela doit cesser.
Sans la boîte de dialogue contextuelle, je ne peux pas décocher "chaînes de recherche". Même si cela était coché, Intellij ne devrait jamais inclure les suggestions par défaut, surtout quand il est en dehors du fichier actuel. Il peut également recommander de les refactoriser, mais ils doivent être exclus par défaut. Autrement dit, il devrait s'agir d'une fonctionnalité optionnelle, plutôt que de tout détruire par défaut.
Il s'agit d'un sérieux problème d'expérience utilisateur avec la refactorisation Intellij plus récente dite "intelligente". Lors de la refactorisation de fichiers JS, je ne veux pas rechercher dans les fichiers Java des commentaires ou des chaînes! Période! Et vice versa!
La sécurité passe avant tout! Les développeurs qui savent ce qu'ils font rechercheront eux-mêmes les chaînes si nécessaire. Dans un environnement de langage dynamique, cela rend Intellij impossible à utiliser, car fréquemment, et sans modèle clair, des refactorisations sont parfois effectuées, parfois cela change les choses à travers le projet et ainsi de suite.
Il devrait y avoir une option qui dit, "refactoriser uniquement par rapport à ce fichier ou lorsque 100% inféré!", En particulier pour les langages dynamiques! Pour les langages statiques, il ne devrait même pas essayer de rechercher des commentaires et des chaînes en dehors du fichier.
Je ne voulais pas le publier en public, mais j'ai soulevé ce problème il y a plus de 2 ans dans le bugtracker, mais personne n'y a prêté attention.
ÉDITER
Pour ceux d'entre vous qui pensent que je pourrais aller trop loin, j'ai juste essayé ceci:
Avec cette classe:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
Et en ajoutant ceci à n'importe quelle classe Java, par exemple:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Lors de la refactorisation KV.val
comme avant, j'obtiens les recommandations suivantes, une entrée en cas de catastrophe et quelque chose que je dois évaluer et exclure une à la fois. Cela demande des efforts et est juste ennuyeux et risqué. C'est comme si quelqu'un hurlait, STOP! Et puis ooh, rien après une minute, de la frustration et un long essai de 1000 mots (ça).
Sérieusement, y a-t-il un moyen de désactiver ce genre de comportement à risque !? Et y a-t-il une raison pour laquelle cela est activé par défaut?
EDIT 20200706
La merde continue en 2020: https://youtrack.jetbrains.com/issue/IDEA-245370
User
pourMyUser
qu'il renommera tout , y compris les fichiers de configuration, les étiquettes, les urls, les chemins dans les appels de repos cartographie ...Réponses:
Lorsque vous appuyez
Shift + F6 (Refactor Rename)
deux fois, cela ouvre la boîte de dialogue et vous pouvez désactiver "Rechercher dans les commentaires et les chaînes"la source
Oui il y a. Les gens ont tendance à utiliser beaucoup trop de DSL, de modèles et d'injections de langage de nos jours. Dans le vieux Java, toutes ces choses existent principalement sous forme de chaînes. L'API Reflection représente également le nom de la méthode / classe sous forme de chaîne. Il n'est pas possible pour aucun IDE de les prendre en charge et de les reconnaître tous, il est donc préférable de vous fournir un filet de sécurité contre d'éventuelles erreurs de refactoring. Si vous avez une excellente couverture de test unitaire, vous êtes probablement en sécurité ici.
Quant aux commentaires, ils contiennent souvent des exemples de code. Ces morceaux de code deviennent rapidement obsolètes lors des renommage, il est donc utile lorsque l'EDI vous rappelle leur existence.
Ce contrôle, bien sûr, entraîne parfois des faux positifs. Cependant, si vous donnez à vos variables des noms explicites et descriptifs (je ne veux pas dire "var" ou "val"), il est peu probable que cela se produise. Ainsi, IDE vous pousse vers un meilleur style de code d'une certaine manière.
Si vous n'êtes toujours pas convaincu, suivez les conseils de @Meo et désactivez la recherche dans les chaînes et les commentaires.
la source