簡體   English   中英

Eclipse Scout 的 JavaParser 和 SymbolSolver

[英]JavaParser and SymbolSolver for Eclipse Scout

我要分析我已經開始使用類之間的依賴關系JavaParser類和它的SymbolResolver了。 但是在解析來自Eclipse Scout的示例項目上的幾個方法引用時,它一直失敗。 Scout 使用它自己的BEAN 管理器,它在 jvm 啟動時將 java 類加載到一個列表中,這使得在運行時加載和卸載類更加靈活。 但是 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)))));
    }

我將所有 maven 依賴項 JAR 添加到源根文件夾以及所有源代碼中,我只是使用 Scout 中的一個簡單的 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 能夠解析所有類和方法調用。

您的分析是在運行時還是在基於源代碼的 IDE 中進行? 前者是關於 Scout運行時和調用 BEANS 時使用的 BeanManager 的問題,后者是關於 Scout SDK的問題,您可以在此處下載:適用於 Scout 開發人員的 Eclipse IDE。

我假設您想分析源代碼。 當您下載上面提到的 Eclipse 包時,您將獲得帶有 Eclipse Scout 附加插件的 Eclipse IDE。 這些插件使用 Eclipse 平台提供的工具來分析 Scout 類。 因此,我建議您查看Eclipse Scout SDK 源代碼並使用相同的工具進行分析。 確保選擇與 Scout 項目版本匹配的發布分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM