我无法获得正确的方法。很少得到适当的少数不是。
for (CtMethod declaredMethod : declaredMethods) {
int methodLineNumber = declaredMethod.getMethodInfo().getLineNumber(0);
}
1)什么是错误?
2) 在getLineNumber(int offset)中如何计算偏移量?
我无法获得正确的方法。很少得到适当的少数不是。
for (CtMethod declaredMethod : declaredMethods) {
int methodLineNumber = declaredMethod.getMethodInfo().getLineNumber(0);
}
1)什么是错误?
2) 在getLineNumber(int offset)中如何计算偏移量?
如果我正确理解了您的问题,您正在寻找您的 java 代码中所有方法的相关起始行号
我建议您使用 JavaParser ( https://javaparser.org/ )
Github 链接 - https://github.com/javaparser/javaparser
它是一个 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);
}
如果您需要在多个文件上运行,可以使用 Files.walk() 来制作此处的 File src
File mySrc = new File(srcRoot, filePath)
其中 filePath 是您需要运行 java 解析器的文件的路径,可以使用
getMethodStartLineNumbers(File mySrc)
PS:他们网站上的电子书为您提供了 Java Parsers 的精彩介绍