2011-10-18 39 views
0

我使用Eclipse JDT獲得工作區每個打開的項目的所有類的名字命名,但到現在爲止,我不能這樣做...的Eclipse JDT得到的類

IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
IProject[] iprojects = workspace.getRoot().getProjects(); 

for (IProject ip : iprojects) 
{ 
    if (ip.isOpen() == true) 
    { 
     IJavaProject javaProject = JavaCore.create(ip); 

    IPackageFragment[] packages; 
    try 
    { 
     packages = javaProject.getPackageFragments(); 

     for (IPackageFragment mypackage : packages) 
     { 
      if (mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) 
      { 
       System.out.println("Source Name " + mypackage.getElementName()); 
       System.out.println("Number of Classes: " + mypackage.getClassFiles().length); 
      } 
      else if (mypackage.getKind() == IPackageFragmentRoot.K_BINARY) 
      { 
       System.out.println("Binary Name " + mypackage.getElementName()); 
       System.out.println("Number of Classes: " + mypackage.getClassFiles().length); 
      } 
     } 
    } catch (JavaModelException e) { 
     e.printStackTrace(); 
    } 
} 

有了這個,我只能獲得課程數量:0爲我的項目示例中的每個軟件包!

出了什麼問題?爲什麼我無法獲得每個包的類,然後獲得每個類的名稱?

- 歡呼聲中,澤·卡洛斯

+0

你知道getClassFiles()和getCompilationUnits()返回不同的結果,不是嗎? 爲什麼你不使用SearchEngine呢? – nitind

+0

來自API: getClassFiles()返回此包裹片段中的所有類文件,但包裹片段可能只包含編譯單元。 getCompilationUnits()返回此包裹片段中的所有編譯單元,但包裹片段可能只包含類文件。 現在我很困惑,我該用什麼? 關於SearchEngine,我對此一無所知,這是對我的問題更好的解決方案? – josecampos

回答

0

嘗試org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(...)方法之一。

+0

我無法理解searchAllTypeNames的文檔,你能提供給我一個例子嗎?在此先感謝... – josecampos

0

從Javadoc中

org.eclipse.jdt.core.ICompilationUnit - 表示整個Java 編譯單元(與Java狀延伸的一個源文件)。 編輯單元元素在導航或操縱之前需要打開。

org.eclipse.jdt.core.IClassFile - 表示整個二進制類型 (單個.class文件)。

在你的項目中不應該有類文件,因爲它們可能是源項目。因此查找ICompilationUnits。

+0

我的項目中沒有任何類文件?當我編譯項目時,我創建了類文件,對吧?! – josecampos

+0

是的,編譯後的類轉到輸出文件夾或「bin」文件夾。但是,在這裏您想使用源文件 - 所以只需使用getCompilationUnits()而不是getClassFiles()。 –

0

一切似乎是正確的與您的代碼。事情是: 1.只有在插件開發項目中使用它,它纔會起作用。也就是說,製作一個示例插件並將此類稱爲基本插件類進行測試。 2.它將列出新打開的插件選項卡中的項目名稱。因此,在新的eclipse窗口中創建一些示例項目,將其作爲「eclipse應用程序」運行。

我有正常工作一個簡單的代碼,試試吧:

進口org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin;

公共類GetProjectName {

public static IProject[] getProjects() 

{ 

    IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); 
    System.out.println(ResourcesPlugin.getWorkspace().getRoot().getName()); 

    System.out.println(" **** "+ projects.length +" ***"); 

    for (IProject project : projects) { 
     System.out.println(project.getName()); 
    } 



    return projects; 

} 

}