覆盖生成的 Java 源中的行号

2022-09-03 13:39:36

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

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

C# 具有 #line 指令,我已成功利用它来将行号从源文件映射到编译的结果。我需要Java的相同功能。

谢谢!


答案 1

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


答案 2

不幸的是,不,Java中没有等效的指令。您可以做的最好的方法是在生成源代码后通过删除/插入换行符以匹配实际源代码(或修改代码生成器)来修改源代码。或者,您可以在编译二进制类文件后修改存储在其中的行号,但这可能会更加痛苦。#line


推荐