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