java黑魔法-注解处理器修改java源代码

如果读者接触过一些java项目, 可能看到过lombok这个依赖, 其提供的@Getter @Setter等注解会在编译时往源类添加/修改代码, 从而方便开发。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	
@Getter
@Setter
public String str;

/*
编译后
|
V
*/

public String str;

@Generated
public String getStr() {
return this.str;
}

@Generated
public void setStr(String str) {
this.str = str;
}

然而如果你真的试图复现一个简单的@Getter @Setter类似物, 会发现java提供的公开API只能通过注解处理器创建新的.java文件并写入新源码, 并不能修改源类代码. 所以本文下面简单介绍如何不使用外部依赖的情况下通过纯注解处理器修改编译时源类代码. 并逐步实现一个可以简化Minecraft模组网络包编写与注册的注解。