Есть ли способ подключиться к компилятору Eclipse, чтобы указать логику чтения/разрешения/загрузки класса, когда скомпилирован исходный файл 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
, пока не будет выполнен «полный» компиляция проекта. Пока что это хорошо для моих целей (есть вещи, которые я могу сделать позже, чтобы решить это).
Любые идеи/предложения?
Спасибо!
Спасибо за ваш ответ! Я подозревал, что :( – alopecoid