有没有办法在编译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();
[...]
}
编译器应该在编译源文件foo/Foo.java
时请求读取3个类:
bar.Bar
- 指定为导入。baz.Baz
- 它以完全限定的形式使用(... = baz.Baz.getQux()...
)。qux.Qux
- 这是一种“间接”依赖关系(通过调用baz.Baz.getQux()
返回,后者又通过调用bar.Bar
来访问getBar()
1}}方法)。我希望能够拦截这些“类请求”中的每一个,以便我可以提供自定义逻辑来获取有问题的类(可能它存在于数据库中,也许它是由某个服务器在某处提供的,等等) )。
另外,如果没有尝试编译Eclipse项目中的任何源文件,直到用户明确打开它们,我都会喜欢它。因此,在上面的示例中,在用户实际打开源文件bar.Bar
之前,不会发出3个类请求(baz.Baz
,qux.Qux
,foo/Foo.java
)。理想情况下,项目中的源文件列表不必是文件系统上的实际文件(可能它们也存在于数据库中等),只有在用户打开/加载源文件时才会进行编译尝试。
我意识到,如果可能的话,这有一些缺点。例如,如果我编辑源文件foo/Foo.java
以使类“包私有”,这将默默地破坏依赖于foo.Foo
的任何类,直到完成项目的“完整”编译。就目前而言,这对我的目的来说很好(以后我可以做些事情来解决这个问题)。
有任何想法/建议吗?
谢谢!
答案 0 :(得分:0)
可能不会,这将属于JDT的Java构建路径部分,我不认为它具有该级别的自定义。似乎没有为此记录的扩展点。要获得明确的答案,您需要查看源代码。您可以添加此功能,这意味着您需要使用JDT的备用版本,这可能很难或不可能。