Refactoring my code che dipende da un metodo di libreria rinominato

2

Supponi che la libreria di terze parti Beautify rinomina uno dei loro metodi da beauty a makeBeautiful perché vogliono che il metodo sia un verbo e per una mancanza di pianificazione iniziale non lo ha fatto dall'inizio.

Ora, uso molto questo metodo beauty ... come faccio a rinominare tutte le occorrenze di esso in makeBeautiful senza fare una semplice stringa di ricerca e sostituzione? Esiste un nome per questo tipo di refactoring? Qualche strumento lo supporta?

Sono particolarmente interessato alle soluzioni Java, ma se riesco almeno a ottenere un nome per il tipo di refactoring sarebbe fantastico.

    
posta Jason 16.03.2016 - 18:27
fonte

2 risposte

5

Molti IDE moderni offrono opzioni di refactoring, puoi evidenziare il metodo che vuoi refactoring, eseguire il refactoring del rename e sei praticamente impostato. Se non riesci ad arrivare alla fonte della classe, ti suggerirei di mimarla, creando un dummy temporaneo della classe di cui vuoi modificare l'API (stesso nome, stesso pacchetto) e refactoring. Quindi elimina questo dummy e importa la tua nuova versione della libreria.

Rinominare a parte, dovresti probabilmente optare comunque per un refactoring globale del tuo codice creando un adattatore, avvolgendo la libreria di terze parti e poi usando l'adattatore per tutto il progetto. In questo modo dipenderete dalla vostra API e se l'API della classe di terze parti cambia in futuro, tutto ciò che dovete fare è cambiare la chiamata in un posto. Uno dei grandi vantaggi del modello di adattatore .

    
risposta data 16.03.2016 - 18:37
fonte
2

Per la ridenominazione occasionale, il migliore sarebbe utilizzare un IDE comune. Molti IDE eseguono già analisi di sintassi e hanno quindi alcuni strumenti di refactoring integrati. Se si ha un problema di refactoring più grande (molte classi e metodi vengono rinominati) uno strumento automatico potrebbe aiutare.

Ecco alcuni suggerimenti:

  • Rinominare l'elemento Eclipse . La funzione di ridenominazione del refactoring ha due comportamenti diversi. Se la classe a cui si fa riferimento è inclusa nel progetto, il metodo nella classe viene aggiornato come tutti i suoi riferimenti. Se la classe è inclusa solo come parte di una libreria jar, non è possibile rinominare un metodo valido (messaggio di errore) ... a meno che il metodo non esista più nella libreria. Ho fatto il test, sostituendo il barattolo con un barattolo accuratamente aggiornato preparato al di fuori di Eclipse. Non appena Eclipse ha notato che il metodo non esisteva più, mi ha permesso di rinominare. Questa funzione è abbastanza potente da rinominare anche il metodo nelle classi derivate. Sfortunatamente, ho dovuto farlo file per file.
  • Rinomina dell'elemento Netbeans (da verificare)
  • walkmod con un plug-in refactoring per il refactoring utilizzando le regole su una scala più ampia. Si noti che uno dei casi d'uso descritti nella documentazione del plugin è esattamente la ridenominazione di classi o metodi in caso di una libreria modificata.
risposta data 16.03.2016 - 19:04
fonte

Leggi altre domande sui tag