Как получить правильный номер строки всех методов с помощью 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

Другие вопросы по тегам