public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Estoy tratando de refactorizar la variable de clase value
, que sucede en su lugar. Eso significa que no aparece ningún diálogo; Presiono enter e intenta refactorizar en todo el proyecto, incluidos los comentarios y lo que no, incluidos:
<%--<link href="<c:url value="../core/core.css" />" />--%>
en un archivo .jsp. Eso es demasiado "inteligente" para intentar refactorizar comentarios que coincidan en todo el proyecto. Esto a menudo causa mucho riesgo de errores y la refactorización en un entorno Java ya no es segura.
Lo mismo estaba ocurriendo en Intellij 12. En serio, no necesito que Intellij recomiende nada que se considere inseguro, ¡o cuando no esté seguro de que sea lo mismo!
Puedo excluir las refactorizaciones pero no tengo tiempo para evaluar cinco "sugerencias" cada vez. Simplemente aumenta la posibilidad de error humano: la mayoría de las veces simplemente presiono enter, y las cosas se refactorizan.
La refactorización también es un problema importante en un entorno Java cuando a veces intenta reemplazar cosas en archivos .js. En serio, esto tiene que terminar.
Sin el cuadro de diálogo emergente, no puedo desmarcar "cadenas de búsqueda". Incluso si eso estuviera marcado, Intellij debería nunca incluir las sugerencias de forma predeterminada, especialmente cuando está fuera del archivo actual. También puede recomendar refactorizarlos, pero deberían excluirse de forma predeterminada. Es decir, debería ser una función opcional, en lugar de destruir todo por defecto.
Este es un problema serio de experiencia de usuario con la refactorización de Intellij más reciente llamada "inteligente". Al refactorizar archivos JS, no quiero buscar comentarios o cadenas en archivos Java. ¡Período! ¡Y viceversa!
¡La seguridad es lo primero! Los desarrolladores que saben lo que están haciendo buscarán cadenas ellos mismos si es necesario. En un entorno de lenguaje dinámico, hace que Intellij sea imposible de usar, porque con frecuencia, y sin un patrón claro, a veces se realizan refactorizaciones, a veces cambian las cosas a lo largo del proyecto y otras cosas.
Debería haber una opción que diga, "¡refactorizar solo en relación con este archivo o cuando se infiera al 100%!", ¡Especialmente para lenguajes dinámicos! Para los lenguajes estáticos, ni siquiera debería intentar buscar comentarios y cadenas fuera del archivo.
No era mi intención publicarlo, pero planteé este problema hace más de 2 años en el bugtracker, pero nadie prestó atención.
EDITAR
Para aquellos de ustedes que piensan que podría llegar demasiado lejos, acabo de probar esto:
Con esta clase:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
Y agregando esto a cualquier clase de Java, por ejemplo:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Al refactorizar KV.val
como antes, obtengo las siguientes recomendaciones, un ENTRAR del desastre y algo que tengo que evaluar y excluir uno a la vez. Requiere esfuerzo y es molesto y arriesgado. Es como si alguien gritara: ¡ALTO! Y luego, ooh, nada después de un minuto, frustración y un ensayo de 1000 palabras (esto).
En serio, ¿hay alguna manera de desactivar este tipo de comportamiento de riesgo? ¿Y hay alguna razón por la que esto esté activado de forma predeterminada?
EDITAR 20200706
La mierda continúa en 2020: https://youtrack.jetbrains.com/issue/IDEA-245370