[英]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.