JavaParser и SymbolSolver для Eclipse Scout - PullRequest
0 голосов
/ 10 января 2020

Я хочу проанализировать зависимости между классами, которые я начал использовать JavaParser и его SymbolResolver для. Но он продолжает сбой при разрешении нескольких ссылок на методы в примере проекта из Eclipse Scout . Scout использует собственный менеджер BEAN , где он загружает java классы при запуске jvm в список, что делает его более гибким для загрузки и выгрузки классов во время выполнения. Но Eclipse IDE может разрешать зависимости так или иначе . Вот мой рабочий пример, который я использую для разбора проекта Eclipse Scout:

    private static String getFullyQualifiedName(MethodCallExpr exp) {
        String result = "";
        try {
            result = exp.getName() + " --> " + exp.resolve().getQualifiedSignature();
        } catch (RuntimeException e) {
            result = "!unable to resolve! " + exp.getName();
        }
        return result;
    }

    private static void runAnalysis(String sourceFolder) {
        final ProjectRoot projectRoot = new SymbolSolverCollectionStrategy().collect(new File(sourceFolder).toPath());
        projectRoot.getSourceRoots().forEach(sourceRoot -> sourceRoot.tryToParseParallelized()
            .forEach(parsedSource -> parsedSource.getResult().get().findAll(MethodCallExpr.class)
                .forEach(exp -> System.out.println(parsedSource.getResult().get().getPackageDeclaration().get().getNameAsString()
                    + "." + parsedSource.getResult().get().getStorage().get().getFileName()
                    + " (" + exp.getBegin().get().line + ") "
                    + getFullyQualifiedName(exp)))));
    }

Я добавляю все jav-файлы зависимостей maven в исходную папку root, а также весь исходный код, и я просто использую простой пример helloworld от Скаута. Мне кажется совершенно случайным, почему и когда это работает против того, когда не удается разрешить MethodCallEx. Java Symbol Solver даже может разрешить некоторые из зависимостей BEAN.get (), что приятно.

Успешный вывод выглядит следующим образом:

scout.ui.html.UiServletFilter.java (66) destroy --> org.eclipse.scout.rt.server.commons.authentication.DevelopmentAccessController.destroy()

И неудачный вывод, например что:

scout.server.helloworld.HelloWorldService.java (15) !unable to resolve! getUserId

Но Eclipse IDE может разрешать все классы и вызовы методов.

1 Ответ

0 голосов
/ 23 января 2020

Ваш анализ выполняется во время выполнения или в среде IDE на основе исходного кода? Первый - это вопрос о Scout runtime и BeanManager, который используется при вызове BEANS, второй - это вопрос о Scout SDK , который вы можете скачать здесь : Eclipse IDE для разработчиков скаутов.

Полагаю, вы хотите проанализировать исходный код. Когда вы загружаете упомянутый выше пакет Eclipse, вы получаете Eclipse IDE с дополнительными плагинами для Eclipse Scout. Эти плагины используют инструменты, предоставляемые платформой Eclipse, для анализа классов Scout. Поэтому я бы посоветовал вам взглянуть на исходный код Eclipse Scout SDK и использовать те же инструменты для своего анализа. Убедитесь, что вы выбрали ветку релиза, соответствующую версии вашего проекта Scout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...