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
fuente
User
a laMyUser
que va a cambiar el nombre de todo, incluyendo los archivos de configuración, etiquetas, URLs, caminos en las llamadas de descanso mapeo ...Respuestas:
Cuando presiona
Shift + F6 (Refactor Rename)
dos veces, se abre el cuadro de diálogo y puede deshabilitar "Buscar en comentarios y cadenas"fuente
Sí hay. La gente tiende a usar demasiados DSL, plantillas e inyecciones de lenguaje en estos días. En Java simple y antiguo, todas estas cosas existen principalmente como cadenas. La API de Reflection también representa el nombre del método / clase como una cadena. No es posible que ningún IDE los admita y reconozca a todos, por lo que es mejor proporcionarle una red de seguridad contra posibles errores de refactorización. Sin embargo, si tiene una excelente cobertura de prueba unitaria, probablemente esté seguro aquí.
En cuanto a los comentarios, a menudo contienen ejemplos de código. Estos fragmentos de código se vuelven obsoletos rápidamente durante el cambio de nombre, por lo que es útil cuando el IDE le recuerda su existencia.
Esta verificación, por supuesto, a veces da como resultado falsos positivos. Sin embargo, si le está dando a sus variables nombres descriptivos que se expliquen por sí mismos (no quiero decir "var" o "val"), es poco probable que esto suceda. Entonces, IDE te está empujando hacia un mejor estilo de código de alguna manera.
Si aún no está convencido, siga un consejo de @Meo y desactive la búsqueda en cadenas y comentarios.
fuente