Переопределение номера строки в сгенерированном источнике Java

Попробуйте убрать пробел в названии проекта. «PhoneProj V3» получает urlencoded, что приводит к «PhoneProj% 20V3», а полученное имя не существует.

Попробуйте изменить «PhoneProj V3» на «PhoneProjV3» (убрать пробел).

14
задан Seki 26 January 2015 в 10:54
поделиться

5 ответов

Используя Янино можно произойти из Scanner и переопределение location() метод. Этот метод возвращает объект Местоположения. Можно переопределить read() метод для поиска аннотаций, в рамках комментариев, например (добавленный во время генерации кода), которые содержат информацию номера строки.

Вы просто передаете свой сканер SimpleCompiler.cook() метод и Вы можете управлять тем, о каком имени файла, строке и столбце сообщают относительно ошибки.

3
ответ дан 1 December 2019 в 13:10
поделиться

К сожалению, нет, нет эквивалента #line директива в Java. Лучшее, которое можно сделать, изменяют источник после того, как он был сгенерирован путем удаления/вставки новых строк, чтобы соответствовать реальному источнику (или изменить генератор кода). Или, Вы могли изменить номера строки, сохраненные в двоичных файлах класса после того, как они были скомпилированы, но это, вероятно, будет еще более болезненно.

4
ответ дан 1 December 2019 в 13:10
поделиться

Я никогда не видел, что это использовало для кроме JSP, но JSR-45 был разработан, чтобы использоваться с этой целью для любого исходного языка. Процесс вовлекает создание второго файла в специальный формат ("SMAP"), который отображает номера строки в первоисточнике к номерам строки в сгенерированном исходном коде Java.

9
ответ дан 1 December 2019 в 13:10
поделиться

Вместо того, чтобы генерировать код Java как Ваш промежуточный язык, Вы могли попытаться использовать ассемблер JVM. Жасмин имеет хороший синтаксис, и Вы свободны вставить .line директивы в соответствующих местах в Вашем коде. Вы можете, также может также указать файл первоисточника с помощью .source директиву.

Предоставленный, идя ассемблерным путем может быть больше стычки, чем это стоит :)

3
ответ дан 1 December 2019 в 13:10
поделиться

Нет никакого простого решения. Одно обходное решение должно было бы генерировать карту номера строки от [Ваш язык] к Java, когда Вы генерируете код. Можно передать выход компилятора по каналу и использовать карту для замены номеров строки Java номерами строки.

1
ответ дан 1 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: