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()
問題のクラスを取得するためのカスタムロジックを提供できるように、これらの「クラスリクエスト」のそれぞれをインターセプトできるようにしたいと思います(おそらくデータベースに存在するか、どこかのサーバーによって提供されるなど)。
また、ユーザーが明示的に開くまで、Eclipse プロジェクトのソース ファイルをコンパイルしようとしないでください。したがって、上記の例では、ユーザーが実際にソース ファイルを開くまで、3 つのクラス リクエスト ( bar.Bar
、baz.Baz
、 ) は作成されません。理想的には、プロジェクト内のソース ファイルのリストは、ファイル システム上の実際のファイルである必要はなく (おそらく、データベースなどに存在することもあります)、ユーザーがソース ファイルを開く/読み込むときにのみコンパイルが試行されます。qux.Qux
foo/Foo.java
可能であれば、これにはいくつかの欠点があることを認識しています。たとえば、ソース ファイルを編集してクラスを「パッケージ プライベート」にすると、プロジェクトの「完全な」コンパイルが完了するまで、foo/Foo.java
依存するすべてのクラスが黙って壊れます。foo.Foo
今のところ、それは私の目的には問題ありません (これを解決するために後でできることがあります)。
アイデア/提案はありますか?
ありがとうございました!