首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖生成的Java源代码中的行号

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

Stack Overflow用户
提问于 2009-02-10 03:08:39
回答 5查看 1.6K关注 0票数 15

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

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

C#有#line指令,我已经成功地利用它将源文件中的行号映射到编译结果。我需要同样的Java代码。

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-15 13:04:55

使用Janino,您可以从Scanner派生并覆盖location()方法。此方法返回一个Location对象。您可以重写read()方法来查找注释,例如在注释中(在代码生成过程中添加的),这些注释包含行号信息。

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

票数 4
EN

Stack Overflow用户

发布于 2009-02-10 03:25:48

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

票数 10
EN

Stack Overflow用户

发布于 2009-02-10 03:13:15

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/530945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档