我将 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 确实保留了范围属性中的原始“坐标”,所以也许可以以某种方式使用它?
2 回答
aluckdog
TA贡献1847条经验 获得超7个赞
这个答案可能很晚了,但这对我有用......
public void visit(MethodDeclaration method) {
int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
}
添加回答
举报
0/150
提交
取消