为什么 IJavaProject.findPackageFragmentRoots 返回一个空数组?
2022-09-01 10:03:44
每次我调用并传递一个CPE_PROJECT的IClasspathEntry时,它都会返回一个空列表。我暂停了调试器,并在 Eclipse Display 视图中运行了以下行,以查看发生了什么:IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)
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_PROJECT。此外,引用的 Java 项目(标题为“某个项目”)至少有一个包含源代码的根。根据IJavaProject的javadoc,这似乎应该返回至少一个IPackageFragmentRoot,但它没有。
你知道我在这里误解了什么吗?我如何从 IClasspathEntry CPE_PROJECT中获取 IPackageFragmentRoots 而不做任何好事?(我的意思是,我可以从类路径条目中获取IJavaProject,并循环访问其原始类路径,忽略未导出的条目,以搜索IPackageFragmentRoots。