我正在开发一个Eclipse插件,它根据这些类文件中的一些Annotations更改Java项目的已编译类文件。
例如,假设我有一个注释@AddSomeField
,我有一个像这样的Java源文件:
@AddSomeField
public class TestClass {}
然后我的插件可能会生成与以下源代码
对应的字节代码public class TestClass {public static int SOME_FIELD = 0;}
并将JDT生成的类文件替换为相应的类文件。每次JDT构建完成后,这都是在ASM的帮助下在单独的构建过程中完成的(该插件提供了Eclipse构建器)。
现在,所有这一切都运行良好但我遇到了以下问题:当我尝试引用字段时,JDT编辑器无法看到添加的字段并显示SOME_FIELD cannot be resolved or is not a field
错误,例如:
public class Main{
public static void main(String[] args) {
System.out.println(TestClass.SOME_FIELD);
}
}
此错误仅在JDT编辑器中报告,但不在编译器中报告。因此,源文件本身不会显示任何错误,并且运行上述main方法也可以正常运行而没有任何错误。
有没有办法让JDT编辑器看到这些已更改的类文件,或者在编译后是否存在更改类文件的其他解决方法?
如果您想自己重现问题,可以执行以下操作:
TestClass.java
类创建Java项目。TestClass.class
文件保存在其他位置TestClass.java
中删除静态字段并清理项目TestClass.class
文件替换为修改后的版本Main.java
课程添加到您的项目Main
类 - 应该可以正常运行而不会出现任何错误