从行号获取方法名称

4

给定一个特定类源代码(Java/C#)的行号,有没有一种简单的方法来获取它所属的方法名称?(如果它属于某个方法)(大概使用抽象语法树)

(这对于限制checkstyle输出到仅涉及的方法很有用)。

我假设您需要使用抽象语法树来进行行号->方法名的转换。

3个回答

2

我不知道Java,但是.NET程序集在它们的元数据表中没有存储行号 - 你需要一个PDB(程序数据库)文件来获取这种信息。


2

(针对Java)

如果类文件是使用调试信息编译的,则行号表将包含代码<->行号的映射。我不认为有内置的API可以在运行时获取这些信息,但我相信您可以使用一些字节码工程库(例如ASM或BCEL)来实现。


0

是的,正如您所说,使用正确类型的AST。 DMS软件重构工具包可以为Java和C#构建AST。每个AST节点都带有行号数据。每个AST节点对应一个语法规则。

因此,确定行号的方法名称问题非常容易:在AST中找到与相应行号对应的节点,并向上爬树,直到找到表示方法声明的AST节点;从该节点找到方法名子树并打印出来。

这个技巧在使用DMS构建的静态分析工具中被广泛使用,以报告在特定行号诊断出的问题的有问题的方法名称。 DMS旨在使其他人能够构建这样的静态分析工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接