2015-07-28 17 views
6

Project Lombok si sta tentando di ridurre il codice di codice nella nostra base di codice Java 8. Lo svantaggio è che limita il supporto degli strumenti (refactoring, analisi statica).Supporto di refactoring IDE in un progetto Lombok

Ad esempio, nei miei esperimenti con IntelliJ, il refactoring dei campi di una classe annotata con @Builder non funziona più. Non conosco soluzioni temporanee (devi correggere manualmente le posizioni, dove viene utilizzato il vecchio nome del metodo del Builder).

Un altro esempio è che in Eclipse "trova riferimenti" su un campo non trova i riferimenti, ma una buona soluzione è aprire lo schema e applicare "trova riferimenti" sul getter/setter generato.

Le mie domande:

  • Quali caratteristiche dei principali IDE (soprattutto Eclipse, IntelliJ) refactoring vuol pausa?
  • Esistono buoni soluzioni?
+1

Se non si ottiene una risposta qui, si potrebbe prendere in considerazione la possibilità di chiedere sul [issue tracker] di Lombok (https://github.com/rzwitserloot/lombok/issues). – Jeffrey

risposta

2

Una recente ho imbattuto:

In IntelliJ (non so su Eclipse), non è possibile estrarre un'interfaccia che include tutti i metodi generati da Lombok. Non si visualizzano nella finestra di dialogo pertinente.

C'è una soluzione semplice: lascia che IntelliJ crei i metodi, estra l'interfaccia, ripristini la classe e richieda l'implementazione dell'interfaccia.

4

Ecco una piccola soluzione per ridefinire il getter/setter di una variabile in una classe @Data. Questo funziona in eclisse e probabilmente anche altrove: classe

Campione, dove vogliamo refactoring "valore" a "valore2":

import lombok.Data; 
@Data 
public class Thing { 
    int value; 
} 

(1) Rinomina (non refactoring) la variabile qualcosa di temporaneo per rimuovere getter/setter generato da lombak per il nome originale. Otterrete errori di compilazione ovunque il vecchio getter/setter sono state utilizzate, ma che è temporanea:

@Data 
public class Thing { 
    int valueXXX; // reference to getValue() are broken for the moment 
} 

(2) creare manualmente un manichino getter/setter per il vecchio nome. Gli errori di compilazione scompariranno ora:

@Data 
public class Thing { 
    int valueXXX; 
    public int getValue() { return 0; } 
    public void setValue(int value) {} 
} 

(3) Utilizzare eclissi per refactare il proprio manichino getter/setter. Tutti i riferimenti nel codebase ora usano getValue2() e setValue2():

@Data 
public class Thing { 
    int valueXXX; // 
    public int getValue2() { return 0; } 
    public void setValue2(int value) {} 
} 

(4) Eliminare il manichino getter/setter rinominato e cambiare il nome della variabile dal nome temporaneo a quello nuovo. Ora è tutto lombakized ancora:

@Data 
public class Thing { 
    int value2; 
} 

Certo questo è un po 'fastidioso, ma in realtà non ci vuole molto tempo e di certo battiti cambiare centinaia di riferimenti a mano.

+1

Buona soluzione, ben spiegata. Benvenuti in SO. – namero999

+0

Vorrei suggerire un piccolo miglioramento che ridurrebbe al minimo la quantità di digitazione.(1) commentare l'annotazione "@Data"; (2) utilizzare IDE per generare getter/setter per il campo; (3) decommentare annotazione "@Data"; (4) nome del campo refactor normalmente. (5) cancellare il getter/setter generato. – Buck