JavaParser如何获取块语句的原始行大小?
我正在使用JavaParser进行代码分析项目,在该项目中,我读取一个Java源文件并生成一个AST(抽象语法树)进行分析。我需要从AST中确定给定block语句跨越的原始行数 基本上我有这样一种方法:JavaParser如何获取块语句的原始行大小?,java,javaparser,Java,Javaparser,我正在使用JavaParser进行代码分析项目,在该项目中,我读取一个Java源文件并生成一个AST(抽象语法树)进行分析。我需要从AST中确定给定block语句跨越的原始行数 基本上我有这样一种方法: int numberOfLines(Node astNode){ .... } 我需要返回跨越的行数。例如: void something() { // hello world } 我将返回5 我曾尝试转换为字符串并计算行数,如下所示:new BufferedReader(new Stri
int numberOfLines(Node astNode){
....
}
我需要返回跨越的行数。例如:
void something()
{
// hello world
}
我将返回5
我曾尝试转换为字符串并计算行数,如下所示:new BufferedReader(new StringReader(nodeHere.toString())).lines().count()
,但由于缺少词法保存,这不起作用。。。例如,这样一行:“类TestClass{intx;inty;intzz(inta){returna;}}”变成10行:
class TestClass {
int x;
int y;
int zz(int a) {
return a;
}
}
生成AST后,再转换回字符串,本质上是“美化”它。。。然而,JavaParser确实在range属性中保留了原始的“坐标”,所以也许可以以某种方式使用它
谢谢您可以使用以下内容和属性。i、 例如
range.end.line-range.begin.line
您可以使用以下内容和属性。i、 例如range.end.line-range.begin.line
这个答案可能已经很晚了,但这对我来说很有效
public void visit(MethodDeclaration method) {
int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
}
这个答案可能已经很晚了,但这对我来说很有效
public void visit(MethodDeclaration method) {
int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
}
如果AST中保留了足够的信息以获取行数,则这取决于您使用的词法分析器和解析器。仅使用了Javaparser…这取决于如果AST中保留了足够的信息以获取行数,则您使用的词法分析器和解析器。仅使用了Javaparser。。。