代码之家  ›  专栏  ›  技术社区  ›  Daniel Valland Michael Borgwardt

JavaParser如何获取块语句的原始行大小?

  •  0
  • Daniel Valland Michael Borgwardt  · 技术社区  · 6 年前

    我正在使用JavaParser进行代码分析项目,在该项目中,我读取一个Java源文件并生成一个AST(抽象语法树)进行分析。我需要从AST中确定给定block语句所跨越的原始行数。

    基本上我有这样一种方法:

    int numberOfLines(Node astNode){
    ....
    }
    

    我需要返回跨越的行数。例子:

    void something()
    {
    // hello world
    
    }
    

    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;
        }
    }
    

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ilya    6 年前

    range tokenRange 您可以使用的属性。i、 例如 range.end.line - range.begin.line

        2
  •  1
  •   Христо Петков    5 年前

    这个答案可能已经很晚了,但这对我来说很有效。。。

    public void visit(MethodDeclaration method) {
         int methodBodyLength = method.getRange().map(range -> range.begin.line - range.end.line).orElse(0);
    }