如何使用javaassist或其他api获得所有方法的正确行数?

问题描述 投票:0回答:1

我无法获得正确的方法行数。很少的方法得到正确的行数,很少的方法得不到。

for (CtMethod declaredMethod : declaredMethods) {
        int methodLineNumber = declaredMethod.getMethodInfo().getLineNumber(0);
}

1)错误在哪里?2)在 getLineNumber(int offset) 如何计算偏移量?

java methods bytecode line-numbers java-assist
1个回答
0
投票

如果我对你的问题理解正确的话,你是想找出java代码中所有方法的相关起始行号。

我建议你使用JavaParser(https:/javaparser.org。)

Github链接 - https:/github.comjavaparserjavaparser

这是一个java代码分析工具,我也用它解决了一个类似的问题。

您可能需要覆盖VoidVisitorAdapter中的访问方法。

private static class MethodStartLine extends VoidVisitorAdapter {
    @Override
    public void visit(MethodDeclaration md, Object arg) {

        System.out.println("METHOD: " + md.getDeclarationAsString() + "STARTS AT" + md.getRange().get().begin.line);

    }
}

你需要设置一个编译单元,并在你的驱动代码中按以下方式传递它

private static void getMethodStartLineNumbers(File src) throws ParseException, IOException {
    CompilationUnit cu = JavaParser.parse(src);
    new MethodStartLine().visit(cu, null);
}

如果需要在多个文件上运行,这里的文件src可以使用Files.walk()来制作。

File mySrc = new File(srcRoot, filePath)

其中filePath是你需要运行java解析器的文件路径,可以用

getMethodStartLineNumbers(File mySrc)

PS:在他们的网站上提供的电子书为你提供了很好的Java解析器介绍。

© www.soinside.com 2019 - 2024. All rights reserved.