我正在将 JavaParser 用于代码分析项目,我在其中读取 Java 源文件并生成 AST(抽象语法树)进行分析。我需要确定来自 AST 的给定块语句跨越的原始行数。
基本上我有这样的方法:
int numberOfLines(Node astNode){
....
}
我需要返回跨越的行数。例子:
void something()
{
// hello world
}
将返回 5。
我尝试转换为字符串并计算行数,如下所示:new BufferedReader(new StringReader(nodeHere.toString())).lines().count()
,但这由于缺乏词汇保存而不起作用......例如单行喜欢这样:“class TestClass {int x; int y; int zz (int a){return a;} }" 变成 10 行:
class TestClass {
int x;
int y;
int zz(int a) {
return a;
}
}
当生成 AST,然后转换回字符串时,本质上是“美化”它......但是,JavaParser 确实在 range 属性中保留了原始“坐标”,所以也许可以以某种方式使用它?
谢谢