有没有办法在编译 Java 源文件时挂钩到 Eclipse 编译器以指定自定义类读取/解析/加载逻辑?我不确定正确的术语是什么,但本质上是在运行时发生的“类加载”的编译时等价物。
例如,假设我有 Java 源代码:
package foo;
import bar.Bar;
public final class Foo {
// getQux() returns type: qux.Qux
private final Bar bar = baz.Baz.getQux().getBar();
[...]
}
编译器应在编译源文件时要求读取 3 个类foo/Foo.java
:
bar.Bar
- 它被指定为导入。baz.Baz
- 它以其完全限定的形式 (... = baz.Baz.getQux()...
) 使用。qux.Qux
- 它是一种“间接”依赖(它由对 的调用返回baz.Baz.getQux()
,而后者又用于bar.Bar
通过调用其getBar()
方法来访问 a)。
我希望能够拦截这些“类请求”中的每一个,以便我可以提供自定义逻辑来获取相关类(也许它存在于数据库中,也许它由某处的某个服务器提供服务等)。
此外,如果在 Eclipse 项目中没有尝试编译任何源文件,直到用户明确打开它们,我也希望这样做。因此,在上面的示例中,直到用户实际打开源文件才发出3 个类请求(bar.Bar
、baz.Baz
、 ) 。理想情况下,项目中的源文件列表不必是文件系统上的实际文件(也许它们也存在于数据库中等),并且仅在用户打开/加载源文件时才进行编译尝试。qux.Qux
foo/Foo.java
我意识到,如果可能的话,这有一些缺点。例如,如果我编辑源文件foo/Foo.java
以使类“包私有”,这将默默地破坏任何依赖的类,foo.Foo
直到项目的“完整”编译完成。现在,这对我的目的来说很好(我以后可以做一些事情来解决这个问题)。
有什么想法/建议吗?
谢谢!