Как получить правильный номер строки всех методов с помощью javaassist или любого другого api?
Я не могу найти правильный набор методов. Немногие получают должным образом, немногие - нет.
for (CtMethod declaredMethod : declaredMethods) {
int methodLineNumber = declaredMethod.getMethodInfo().getLineNumber(0);
}
1) В чем ошибка?
2) Как рассчитать смещение в getLineNumber(int offset)?
1 ответ
Если я правильно понял ваш вопрос, вы хотите узнать соответствующий номер начальной строки всех методов в вашем 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);
}
Файл src здесь можно создать с помощью Files.walk(), если вам нужно запустить его для нескольких файлов.
File mySrc = new File(srcRoot, filePath)
где filePath - это путь к файлу, в котором вам нужно запустить парсер java, который можно вызвать с помощью
getMethodStartLineNumbers(File mySrc)
PS: электронная книга, доступная на их веб-сайте, дает вам отличное введение в парсеры Java