为什么IJavaProject.findPackageFragmentRoots返回空数组?

为什么IJavaProject.findPackageFragmentRoots返回空数组?,java,eclipse,eclipse-jdt,eclipse-plugin,Java,Eclipse,Eclipse Jdt,Eclipse Plugin,每次我调用IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)并将cpe\u项目类型的IClasspathEntry传递给它时,它都会返回一个空列表。我暂停了调试器,并在Eclipse显示视图中运行以下行,以查看发生了什么: IClasspathEntry cpe = javaProject.getRawClasspath()[8]; cpe.toString(); (java.lang.String) /Some Proj

每次我调用
IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)
并将cpe\u项目类型的IClasspathEntry传递给它时,它都会返回一个空列表。我暂停了调试器,并在Eclipse显示视图中运行以下行,以查看发生了什么:

IClasspathEntry cpe = javaProject.getRawClasspath()[8];
cpe.toString();
    (java.lang.String) /Some Project[CPE_PROJECT][K_SOURCE][isExported:false][combine access rules:false]

// Show that the referenced project exists and has a root containing source
IClasspathEntry cpe = javaProject.getRawClasspath()[8];
IProject someProject = ResourcesPlugin.getWorkspace().getRoot().getProject(cpe.getPath().toString());
IJavaProject someJavaProject = (IJavaProject) someProject.getNature(JavaCore.NATURE_ID);
IPackageFragmentRoot pfr = someJavaProject.getPackageFragmentRoots()[0];
new Boolean(pfr.getKind() == IPackageFragmentRoot.K_SOURCE).toString();
    (java.lang.String) true

IClasspathEntry cpe = javaProject.getRawClasspath()[8];
javaProject.findPackageFragmentRoots(cpe);
    (org.eclipse.jdt.core.IPackageFragmentRoot[]) []
类路径条目是Java项目类路径的一部分,属于CPE_项目。此外,引用的Java项目(标题为“某个项目”)至少有一个包含源的根。根据,它似乎应该返回至少一个IPackageFragmentRoot,但它没有


知道我误解了什么吗?我怎样才能从IClasspathEntry类CPE_项目中获得IPackageFragmentRoots,而不做一些黑客行为?(我的意思是,我可以从类路径条目中获取IJavaProject并遍历其原始类路径,忽略未导出的条目,搜索IPackageFragmentRoots。)

这是一个在Eclipse 3.7中修复的错误(请参阅)

根据新的API:

结果不包括在此项目的类路径上引用的其他项目中的包片段根


请参见

已归档错误:该错误已修复。它解决了您的问题吗?如果问题现在已解决,请发布自我回答并接受,以便关闭此网站:)