覆盖生成的Java源代码中的行号

Rya*_*rle 14 java code-generation annotations janino

有没有办法覆盖Java中的行号(例如,通过使用某种预处理器指令)?

我正在使用Janino"编译"高级语言,直到Java字节代码.我需要编译器错误来报告原始文件中的行,而不是生成的Java代码.

C#有#line指令,我已成功利用它将源文件中的行号映射到编译结果.Java需要相同的东西.

谢谢!

eri*_*son 9

我从未见过它用于JSP之外的其他东西,但JSR-45被设计用于任何源语言的目的.该过程涉及以特殊格式("SMAP")创建第二个文件,该文件将原始源中的行号映射到生成的Java源代码中的行号.


Rya*_*rle 4

使用 Janino,您可以派生Scanner并重写该location()方法。该方法返回一个 Location 对象。您可以重写该read()方法来查找注释,例如在注释中(在代码生成期间添加),其中包含行号信息。

您只需将扫描仪传递SimpleCompiler.cook()方法,您就可以控制错误报告的文件名、行和列。