簡體   English   中英

使用JDT在獨立的Java應用程序中提取IcompilationUnits

[英]Use JDT to extract IcompilationUnits in a standalone Java application

我正在編寫一個普通的Java應用程序,並且想要提取輸入項目的所有ICompilationUnit(Eclipse不必開發該項目)。 由於我沒有開發Eclipse插件,因此無法使用以下代碼提取ICompilationUnit:

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = Path.fromOSString(source.getAbsolutePath());
IFile file = workspace.getRoot().getFileForLocation(path);
ICompilationUnit compilationUnit = (ICompilationUnit) JavaCore.create(file);

當前,我正在使用下面的代碼來解析輸入的Java文件。 (str包含輸入java文件的源代碼)

ASTParser parser = ASTParser.newParser(AST.JLS12);
parser.setSource(str.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);

但是,以下代碼返回null,因為它不是從Java元素創建的。

ICompilationUnit icu = (ICompilationUnit)compilationUnit.getJavaElement();

問:在普通的Java應用程序中,有什么方法可以提取ICompilationUnits?

JDT搜索引擎需要一個索引 在IDE中,索引是在工作空間構建期間創建的。 這意味着沒有工作空間,就沒有使用現成的搜索引擎方法。

理論上講,可以實現自己的索引,但是絕對不建議這樣做。

剩下兩個選擇:

  1. 如評論中所述,使用您自己遍歷的現有類,或者

  2. 讓您的應用程序在后台將您的代碼作為真實Java項目導入其中的后台初始化工作區。 建立該工作台后,搜索引擎應該可用。 所有這些都可以在無頭的應用程序中發生,而無需啟動Eclipse UI。

有關選項(2)的靈感,您可以從這里開始:

  • PDE的CoreTestApplication ,它是無頭的應用程序,例如,用於運行JDT自己的測試。 在使用-data命令行參數傳遞的位置中,工作空間將自動可用。
  • JDT的AbstractJavaModelTests ,提供了大量實用程序,可以以編程方式創建和配置Java項目。
  • AbstractJavaModelTests的子類,包含無數示例,說明如何使用這些Java項目,包括search

如果您想實時查看所有內容,建議您在源代碼中設置一個包含JDT和PDE項目的工作區。 最簡單的方法是為此使用Oomph

上面的CoreTestApplication將運行,如果您選擇任何測試類,請調用Run as > Run configurations...然后創建JUnit Plug-in Test類型的啟動配置,並在選項卡上Main選擇Run an application: [No Application] - Headless Mode

暫無
暫無

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

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