Механизм обратного вызова компилятора Java? - PullRequest
0 голосов
/ 23 сентября 2010

Есть ли какой-либо механизм обратного вызова в компиляторе Java?Я хотел бы иметь возможность зарегистрировать слушателя, который будет действовать, когда в источнике найдены определенные токены.

Аннотации позволяют вам делать это, но, к сожалению, это не сработает для того, что я пытаюсь сделать.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2010

Если вы не против сделать это программно, вы можете исследовать 1.6 API компилятора Java и API дерева компилятора .Оба из них, а также другая информация, связаны с справочником javac .Вот как вы можете начать:

JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
// setup params for the compilation task
JavacTask jct = (JavacTask)jc.getTask(...); // com.sun.source.util.JavacTask
TaskListener tl = ...;
jct.setTaskListener(tl);
0 голосов
/ 23 сентября 2010

Project Lombok подключается к компилятору. Он использует аннотации для его запуска (это то, чего вы хотите избежать, я знаю), но в исходном коде вы найдете, как он подключается к компилятору. Существует специальный код для компилятора Eclipse и компилятора Sun, и, похоже, не существует общего «общедоступного API компилятора» (за исключением, конечно, запуска компилятора).

Возможно, javax.script работает для вас. В этом случае вы можете использовать привязки, которые позволяют вам определить механизм обратного вызова для неизвестных переменных. Но без подробностей, что именно вы хотите сделать, трудно сказать, подходит ли вам этот вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...