在编译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())。


我希望能够截获这些“类请求”中的每一个,以便我可以提供自定义逻辑来获取有问题的类(也许它存在于数据库中,也许它由某个地方的某些服务器提供服务,等等)。

另外,如果用户没有明确尝试编译Eclipse项目中的任何源文件,我都希望这样做。因此,在上面的示例中,直到用户实际打开源文件bar.Bar时,才发出3个类请求(baz.Bazqux.Quxfoo/Foo.java)。理想情况下,项目中的源文件列表不必是文件系统上的实际文件(也许它们也存在于数据库中,等等),并且仅当用户打开/加载源文件时才进行编译尝试。

我意识到,如果可能,这会有一些缺点。例如,如果我编辑源文件foo/Foo.java以使类“包私有”,这将无声中断依赖于foo.Foo的任何类,直到对项目进行“完全”编译为止。就目前而言,这对我而言很好(以后我可以做一些事情来解决此问题)。

有什么想法/建议吗?

谢谢!

最佳答案

可能不是,这将属于JDT的Java构建路径部分,而且我认为它没有这种定制级别。似乎没有为此记录的扩展点。要获得明确的答案,您需要查看源头。您可能会添加此功能,这意味着您将需要使用JDT的替代版本,这可能很困难或不可能。

10-06 06:45
查看更多