Java Lombok项目中的IDE重构支持
在我们的Java8代码库中减少样板代码很有诱惑力。缺点是它限制了工具支持(重构、静态分析) 例如,在我对IntelliJ的实验中,用注释的类的字段重构不再有效。我不知道有什么解决方法(您必须手动修复使用生成器的旧方法名的位置) 另一个例子是,在Eclipse中,字段上的“find references”没有找到引用,但是一个好的解决方法是打开大纲并在生成的getter/setter上应用“find references” 我的问题是:Java Lombok项目中的IDE重构支持,java,eclipse,intellij-idea,java-8,lombok,Java,Eclipse,Intellij Idea,Java 8,Lombok,在我们的Java8代码库中减少样板代码很有诱惑力。缺点是它限制了工具支持(重构、静态分析) 例如,在我对IntelliJ的实验中,用注释的类的字段重构不再有效。我不知道有什么解决方法(您必须手动修复使用生成器的旧方法名的位置) 另一个例子是,在Eclipse中,字段上的“find references”没有找到引用,但是一个好的解决方法是打开大纲并在生成的getter/setter上应用“find references” 我的问题是: 它破坏了主要IDE(特别是Eclipse、IntelliJ
- 它破坏了主要IDE(特别是Eclipse、IntelliJ)的哪些重构特性
- 有好的解决办法吗
有一个简单的解决方法:让IntelliJ创建方法、提取接口、还原类并让它再次实现接口。这里有一个小的解决方法,可以重构@Data类中变量的getter/setter。这适用于eclipse,也可能适用于其他地方: 示例类,其中我们要将“value”重构为“value2”: (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()
(4) 删除重命名的伪getter/setter,并将变量名从临时名称更改为新名称。现在,一切又都变傻了:
@Data
public class Thing {
int value2;
}
诚然,这有点烦人,但实际上并不需要那么长时间,而且肯定比手工更改数百个引用要好。对于更复杂的重构,我选择了“delombok refactor relombok”。这是一种很重的方法,但在处理复杂重构时,不需要中间中断的构建 在我的例子中,我使用maven进行构建。我添加了maven构建插件,配置如下:
<build>
<plugins>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.6.0</version>
<configuration>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<addOutputDirectory>>false</addOutputDirectory>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.projectlombok
lombok maven插件
1.18.6.0
${project.basedir}/src/main/java
>假的
生成源
德隆博克
这使得delombok拷贝在目标目录下很容易获得
要重构特定的lombok类,请执行以下操作:
例如,手动添加@Builder的setter需要正确声明匹配的lombok生成的内部生成器类。这对于lombok@SuperBuilder继承这样的功能来说变得更加困难。当我尝试手动执行此操作时,我决定以delombok类为指导。当我意识到用DeloBok源替换,随意重构,然后删除它就更简单了。如果你在这里没有得到答案,你可能会想问一下龙目岛的问题。我想建议一个小的改进,以减少打字的数量。(1) 注释掉“@Data”注释;(2) 使用IDE为字段生成getter/setter;(3) 取消注释“@Data”注释;(4) 通常重构字段名。(5) 删除生成的getter/setter。
@Data
public class Thing {
int value2;
}
<build>
<plugins>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.6.0</version>
<configuration>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<addOutputDirectory>>false</addOutputDirectory>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>