La refactorización en IntelliJ IDEA es una de las funciones más potentes para optimizar, limpiar y mantener un código Java más claro y eficiente.
¿Qué es la refactorización?
La refactorización es el proceso de modificar el código fuente de un programa sin cambiar su funcionalidad externa. Su objetivo principal es mejorar la estructura interna del código, haciéndolo más legible, mantenible y eficiente. A través de técnicas como renombrar variables, extraer métodos o eliminar redundancias, los desarrolladores pueden optimizar el código para facilitar su evolución futura y reducir errores.
Cómo acceder a las opciones de refactorización en IntelliJ IDEA
- Por atajo de teclado pulsando a la vez las teclas “Ctrl + Alt + Shift+T”: en este caso hay que seleccionar el archivo/ carpeta o trozo de código que se quiere refactorizar y a continuación pulsar el atajo de teclado.
- Desde la ventana de herramientas, en “Estructura” (Structure): primero hay que seleccionar los métodos o campos que se quiere refactorizar, a continuación clic derecho en los mismos, y saldrá el menú de refactorización con sus opciones.
- En cualquier caso, si hay necesidad de deshacer la refactorización, se puede hacer pulsando a la vez las teclas “Ctrl + Z”.
Por otro lado, en algunas opciones de refactorización permite hacer una vista previa de los cambios antes de ejecutarlos.
- Clic en Vista previa (preview) para ver los posibles cambios que se realizarán.
- Una vez pulsado el botón de vista previa, se abrirá una ventana (Find Refactoring preview) para poder verificar los cambios, y permite cambiar o borrar con una serie de botones o herramientas. Al final de esta ventana habrá dos opciones para continuar y ejecutar la refactorización o cancelarla.
Gestión de conflictos durante la refactorización
Cuando IntelliJ IDEA encuentra problemas en la refactorización, abre un cuadro de diálogo con la lista de conflictos con descripciones.
• Hacer clic en Continuar para ignorar el problema y a continuación se abre la vista previa en la ventana de la herramienta (Find Refactoring preview).
• Hacer clic en “Mostrar conflictos” en vista previa para abrir las entradas de conflicto en la ventana “Find Refactoring preview” para poder realizar los cambios oportunos. Por ejemplo, se puede excluir una entrada de la refactorización presionando “Delete” o haciendo clic en Cancelar para volver al editor.
Incluso, se puede configurar las opciones de refactorización:
En la ventana de configuración que se puede acceder pulsando “Ctrl + Alt+ S”, seleccionar “Editor | Code Editing”. Y en la sección de refactorización, se puede ajustar las opciones de refactorización y aceptando los cambios presionando “OK”.
Tipos de refactorización disponibles en IntelliJ IDEA
• Renombrar (Rename): se puede cambiar el nombre de métodos, parámetros, atributos de clase, variables locales, etc. Se utiliza el atajo de teclado “Alt + F6”. IntelliJ IDEA buscará todas las apariciones de dicho elemento y los actualizará. Si se trata de una clase cambiará el nombre del fichero que lo contiene.
• Eliminar de forma segura (Safe Delete): Esta acción asegura que no se eliminen archivos que están referenciados en el código fuente. Se utiliza el atajo de teclado “Alt + Delete” para aplicar esta refactorización.
• Copiar/Mover (Copy/Move): para copiar o mover elementos dentro de un proyecto. Se utiliza el atajo de teclado “F5” para copiar y “F6” para mover. EIntelliJ IDEA actualizará el namespace y buscará todas las referencias y las actualizará también.
• Extraer método (Extract Method): Reduce la duplicación de código extrayendo fragmentos de código en un nuevo método. Se utiliza el atajo de teclado “Ctrl + Alt + M”. Con este atajo se puede extraer un bloque de código a un método de la clase. IntelliJ IDEA buscará coincidencias del mismo fragmento de código y ofrecerá reemplazarlas por el nuevo método.
Esta refactorización también está disponible como acción de intención en el editor: seleccionar el código que se desea extraer, presionar “Alt + Enter” y seleccionar el método de extracción.
La refactorización del método de extracción tiene las siguientes limitaciones: por un lado, la refactorización no funciona cuando hay referencias a tipos genéricos, y por otro lado, la refactorización no funciona con múltiples valores de salida en modo automático. Hay que cambiar el código antes de aplicar la refactorización.
• Extraer propiedad (Extract Field): para extraer un valor a una propiedad de la clase. Se utiliza el atajo de teclado “Ctrl + Alt + F”.
• Extraer variable (Extract/Introduce variable): para introducir o extraer un valor a una variable del método. Se utiliza el atajo de teclado “Ctrl + Alt + V”.
• Extraer parametro (Extract Parameter): para extraer un valor a un parámetro del método. Se utiliza el atajo de teclado “Ctrl + Alt + P”.
Otras refactorizaciones útiles
En este caso, IntelliJ IDEA analiza el código seleccionado, descubre cuál sería la firma del método para el fragmento extraído, encuentra todas las interfaces funcionales con esta firma de método y envuelve el fragmento de código con una clase anónima basada en la interfaz seleccionada y utiliza esta firma anónima clase como parámetro. Se utiliza el atajo de teclado “Ctrl + Alt + Shift + P”.
• Extraer constante (Extract Constant): para extraer un valor a una constante de la clase. Se utiliza el atajo de teclado “Ctrl + Alt + C”.
• Cambiar firma de un método (Change Signature): Permite modificar la firma de un método, así como agregar o eliminar parámetros. Se utiliza el atajo de teclado “Ctrl + F6.” IntelliJ IDEA buscará todas las llamadas a ese método y actualizará el código con la nueva firma. Para una clase , esta refactorización puede convertir una clase en genérica y manipular sus parámetros de tipo. Corrige automáticamente todas las llamadas, implementaciones y anulaciones de la clase. Para un método, esta refactorización puede cambiar el nombre del método, agregar, eliminar, reordenar y cambiar el nombre de parámetros y excepciones, y propagar nuevos parámetros y excepciones a través de la jerarquía de llamadas.
• Incorporar (Innline): Hace lo contrario que los “Extract”, elimina una declaración de variable, método o constante y coloca su valor (en el caso de variables y constantes) o su código (en el caso de métodos) en aquellos lugares en que se referenciaba a esa variable, método o constante que ya no existirán. Es muy útil cuando se comprueba que el contenido de una variable o constante se va a usar una sola vez y por tanto no merece la pena almacenarlo, sino que queda más limpio el código en una línea. También cuando se observa que un método sólo se llama una o dos veces, por lo que no merece la pena aislar ese código en un método. Se utiliza el atajo de teclado “Ctrl +Alt + N”.
• Migración de tipo (Type Migration): Para cambiar el tipo de una variable de manera segura. Se utiliza el atajo de teclado “Ctrl + Shift + F”.
Enlaces consultados:
https://www.jetbrains.com/help/idea/refactoring-source-code.html#refactoring_invoke
https://devtia.com/post/maneja-intellij-idea-como-una-bestia-refactoring