在Lombok项目中的IDE重构支持

Phi*_*ßen 6 java eclipse intellij-idea lombok java-8

Project Lombok很有可能减少Java 8代码库中的样板代码.缺点是它限制了工具支持(重构,静态分析).

例如,在我使用IntelliJ的实验中,对带有注释的类的字段进行重构@Builder,不再有效.我知道没有解决方法(您必须手动修复位置,使用Builder的旧方法名称).

另一个例子是在Eclipse中"查找引用"字段中找不到引用,但一个好的解决方法是打开大纲并在生成的getter/setter上应用"查找引用".

我的问题:

  • 哪些主要IDE(尤其是Eclipse,IntelliJ)的重构功能会破坏?
  • 有没有很好的解决方法?

小智 8

这是一个小的解决方法,用于重构@Data类中变量的getter/setter.这可以在eclipse中使用,也可能在其他地方使用:

示例类,我们要将"value"重构为"value2":

import lombok.Data;
@Data
public class Thing {
    int value;
}
Run Code Online (Sandbox Code Playgroud)

(1)将变量重命名(不重构)为临时的,以删除lombak为原始名称生成的getter/setter.在引用旧的getter/setter的任何地方都会遇到编译错误,但这是暂时的:

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

(2)手动为旧名称创建一个虚拟的getter/setter.您的编译错误现在将消失:

@Data
public class Thing {
    int valueXXX;
    public int getValue() { return 0; }
    public void setValue(int value) {}
}
Run Code Online (Sandbox Code Playgroud)

(3)使用eclipse重构你的虚拟getter/setter.您的代码库中的所有引用现在都使用getValue2()和setValue2():

@Data
public class Thing {
    int valueXXX; // 
    public int getValue2() { return 0; }
    public void setValue2(int value) {}
}
Run Code Online (Sandbox Code Playgroud)

(4)删除重命名的虚拟getter/setter,并将变量名从临时名称更改为新名称.现在它再次全部被破坏了:

@Data
public class Thing {
    int value2;
}
Run Code Online (Sandbox Code Playgroud)

不可否认,这有点令人讨厌,但它实际上并不需要那么长时间,它确实可以手动更改数百个引用.


Nic*_*tar 2

我最近遇到的一个:

在IntelliJ(不知道Eclipse)中,您无法提取包含lombok生成的任何方法的接口。它们不会出现在相关对话框中。

有一个简单的解决方法:让 IntelliJ 创建方法、提取接口、恢复类并让它再次实现接口。