2015-07-28 72 views
6

Project Lombok正在試圖減少我們的Java 8代碼庫中的樣板代碼。缺點是它限制了工具支持(重構,靜態分析)。Lombok項目中的IDE重構支持

例如,在我對IntelliJ的實驗中,用@Builder註解的類的字段重構不再有效。我知道沒有解決方法(您必須手動修復使用Builder的舊方法名稱的位置)。

另一個例子是,在Eclipse的「查找引用」字段中找不到引用,但一個很好的解決方法是打開大綱並在生成的getter/setter上應用「查找引用」。

我的問題:

  • 其中重構主要IDE(Eclipse的特別,的IntelliJ)的功能它打破?
  • 有很好的解決方法嗎?
+1

如果你在這裏沒有得到答案,你可能想考慮問一下Lombok的[問題跟蹤器](https://github.com/rzwitserloot/lombok/issues)。 – Jeffrey

回答

2

一個我最近碰到:

在的IntelliJ(不知道關於Eclipse),則不能提取包括由龍目產生的任何方法的接口。他們沒有出現在相關的對話框中。

有一個簡單的解決方法:讓IntelliJ創建方法,提取接口,恢復你的類並讓它再次實現接口。

4

這裏有一個小的解決方法來重構@Data類中變量的getter/setter。這適用於Eclipse和其他地方可能還有:

樣品類,在這裏我們要重構「價值」到「值2」:

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

(1)重命名(不重構)的變量一些臨時的東西來刪除lombak爲原始名稱生成的getter/setter。你會得到編譯無論老的getter/setter被引用的錯誤,但這是暫時的:

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

(2)手動創建的舊名稱的虛擬的getter/setter。您的編譯錯誤將立即消失:

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

(3)使用eclipse重構您的虛擬getter/setter。在你的代碼庫的所有引用現在使用getValue2()和setValue2():

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

(4)刪除更名虛擬的getter/setter,並從你的臨時名稱更改變量名,以新的。現在,這一切都再次lombakized:

@Data 
public class Thing { 
    int value2; 
} 

誠然,這是一個有點討厭,但它實際上並沒有持續多長時間,它肯定比手動改變數百引用。

+1

很好的解決方案,很好的解釋。歡迎來到SO。 – namero999

+0

我想建議一個小的改進,以儘量減少打字量。(1)註釋掉「@Data」註釋; (2)使用IDE爲該字段生成getter/setter; (3)取消註釋「@Data」註釋; (4)通常重構字段名稱。 (5)刪除生成的getter/setter。 – Buck