Попробуйте убрать пробел в названии проекта. «PhoneProj V3» получает urlencoded, что приводит к «PhoneProj% 20V3», а полученное имя не существует.
Попробуйте изменить «PhoneProj V3» на «PhoneProjV3» (убрать пробел).
Используя Янино можно произойти из Scanner
и переопределение location()
метод. Этот метод возвращает объект Местоположения. Можно переопределить read()
метод для поиска аннотаций, в рамках комментариев, например (добавленный во время генерации кода), которые содержат информацию номера строки.
Вы просто передаете свой сканер SimpleCompiler.cook()
метод и Вы можете управлять тем, о каком имени файла, строке и столбце сообщают относительно ошибки.
К сожалению, нет, нет эквивалента #line
директива в Java. Лучшее, которое можно сделать, изменяют источник после того, как он был сгенерирован путем удаления/вставки новых строк, чтобы соответствовать реальному источнику (или изменить генератор кода). Или, Вы могли изменить номера строки, сохраненные в двоичных файлах класса после того, как они были скомпилированы, но это, вероятно, будет еще более болезненно.
Я никогда не видел, что это использовало для кроме JSP, но JSR-45 был разработан, чтобы использоваться с этой целью для любого исходного языка. Процесс вовлекает создание второго файла в специальный формат ("SMAP"), который отображает номера строки в первоисточнике к номерам строки в сгенерированном исходном коде Java.
Вместо того, чтобы генерировать код Java как Ваш промежуточный язык, Вы могли попытаться использовать ассемблер JVM. Жасмин имеет хороший синтаксис, и Вы свободны вставить .line директивы в соответствующих местах в Вашем коде. Вы можете, также может также указать файл первоисточника с помощью .source директиву.
Предоставленный, идя ассемблерным путем может быть больше стычки, чем это стоит :)
Нет никакого простого решения. Одно обходное решение должно было бы генерировать карту номера строки от [Ваш язык] к Java, когда Вы генерируете код. Можно передать выход компилятора по каналу и использовать карту для замены номеров строки Java номерами строки.