2011-10-18 40 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; 

} 

}