Eclipse JDT获取类的名称

时间:2011-10-18 21:50:04

标签: eclipse class 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

有什么问题?为什么我不能获得每个包的类,然后获得每个类的名称?

- 干杯,ZéCarlos

3 个答案:

答案 0 :(得分:0)

尝试使用org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(...)方法之一。

答案 1 :(得分:0)

来自Javadocs

  

org.eclipse.jdt.core.ICompilationUnit - 表示整个Java   编译单元(源文件与其中一个类似Java的扩展)。   编译单元元素需要先打开才能打开   导航或操纵。

     

org.eclipse.jdt.core.IClassFile - 表示整个二进制类型   (单个.class文件)。

您的项目中应该没有类文件,因为它们可能是源项目。因此寻找ICompilationUnits。

答案 2 :(得分:0)

您的代码似乎都是正确的。事情是:  1.只有在插件开发项目中使用它时才会起作用。也就是说,制作一个示例插件并将此类调用为要测试的基本插件类。  2.它将在新打开的插件选项卡中列出项目的名称。因此,在新的eclipse窗口中创建一些示例项目,然后将其作为“eclipse应用程序”运行。

我有一个更简单的代码可以正常运行,尝试一下:

import 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;

}

}