1

有没有办法在编译 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.Barbaz.Baz、 ) 。理想情况下,项目中的源文件列表不必是文件系统上的实际文件(也许它们也存在于数据库中等),并且仅在用户打开/加载源文件时才进行编译尝试。qux.Quxfoo/Foo.java

我意识到,如果可能的话,这有一些缺点。例如,如果我编辑源文件foo/Foo.java以使类“包私有”,这将默默地破坏任何依赖的类,foo.Foo直到项目的“完整”编译完成。现在,这对我的目的来说很好(我以后可以做一些事情来解决这个问题)。

有什么想法/建议吗?

谢谢!

4

1 回答 1

0

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

于 2013-02-14T09:28:30.873 回答