我无法获得正确的方法行数。很少的方法得到正确的行数,很少的方法得不到。
for (CtMethod declaredMethod : declaredMethods) {
int methodLineNumber = declaredMethod.getMethodInfo().getLineNumber(0);
}
1)错误在哪里?2)在 getLineNumber(int offset) 如何计算偏移量?
如果我对你的问题理解正确的话,你是想找出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解析器介绍。