我正在使用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
答案 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;
}
}