Как получить правильный номер строки всех методов, используя javaassist или любой другой API? - PullRequest
0 голосов
/ 21 апреля 2020

Я не могу получить правильную линию методов. Немногие получают правильно, немногие - нет.

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

1) В чем ошибка?
2) В getLineNumber (int offset) как вычислить смещение?

1 Ответ

0 голосов
/ 25 апреля 2020

Если я правильно понял ваш вопрос, вы ищите, как узнать соответствующий номер начальной строки всех методов в вашем java коде

. Я бы предложил вам использовать JavaParser (https://javaparser.org/). )

Github Link - 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);
}

Файл sr c здесь можно создать с помощью Files.walk (), если вам нужно запустить его для нескольких файлов

File mySrc = new File(srcRoot, filePath)

, где filePath - это путь к файлу, для которого вам нужен java парсер для запуска, который можно вызвать с помощью

getMethodStartLineNumbers(File mySrc)

PS: электронная книга, доступная на их веб-сайте, дает вам отличное введение в Java парсеры

...