Запустите JDT ASTVisitor на выходе компилятора Java - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь написать расширенный компилятор Java, который выдает все ошибки и предупреждения от javac, а также некоторые ошибки для пользовательских неподдерживаемых функций java.

Поскольку это будет работать на сервере, я хотел быгенерировать синтаксическое дерево только один раз, чтобы повысить производительность.Прямо сейчас я расширяю класс javax.annotation.processing.AbstractProcessor , чтобы генерировать свои собственные ошибки, используя объект ProcessingEnvironment, сгенерированный JavaCompiler API

. Я реализовал это с помощью класса TreeScannerобеспечено солнцем.Однако это не идеально, так как реализация не является открытым исходным кодом, не включена во все JDK, и нет гарантии, что она будет работать с будущими версиями Java Compiler API.

Вот почему я пытался использовать org.eclipse.jdt.core.dom.ASTParser вместо синтаксического анализатора, предоставленного sun, но я не нашел способа использовать объект ProcessingEnvironment, созданный API JavaCompiler.

Кто-нибудь знает, как это сделатьэто или альтернативно, как генерировать все ошибки и предупреждения компилятора, просто используя jdt?

Если вы знаете другую библиотеку, которая может помочь мне решить эту проблему, это также мне очень поможет!

Imизвините, если этот вопрос уже задавался здесь, я искал целый день, но не смог найти лучшего решения, чем использование реализации от sun

1 Ответ

0 голосов
/ 02 декабря 2018

Если вы используете JDT ASTParser для создания CompilationUnit, просто спросите его getProblems(), и вы получите все ошибки / предупреждения / информацию, которые JDT обнаружил в коде.

Обратите внимание, что вы можете настроить параметры, переданные в ASTParser.setCompilerOptions().Возможные опции описаны константами в классе JavaCore, в частности, все, что напоминает опции Xlint в javac, имеет константу, начинающуюся с COMPILER_PB...Эти параметры описаны в онлайн-справке .

. В качестве побочного эффекта вы можете даже увидеть несколько полезных предупреждений, которые не генерирует javac, если вы решите включить соответствующийопции.

...