每次我撥打IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)
並將其傳遞給CPE_PROJECT類的IClasspathEntry時,它將返回一個空列表。我停下調試並運行在Eclipse顯示查看以下行,看看發生了什麼事情:爲什麼IJavaProject.findPackageFragmentRoots返回一個空數組?
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項目(標題爲「某個項目」)至少包含一個包含源的源。根據javadoc for IJavaProject,似乎這應該返回至少一個IPackageFragmentRoot,但它不會。
任何想法我在這裏誤解?我怎麼能從一個類CPE_PROJECT的IClasspathEntry獲得IPackageFragmentRoots而不做一些冒犯的事情? (我的意思是,我可以從類路徑條目中獲取IJavaProject並遍歷其原始類路徑,忽略未導出的條目,以搜索IPackageFragmentRoots。)
的bug已經提交:https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 – peskal 2010-09-05 04:45:46
的bug已被修正。它解決了你的問題嗎? – 2011-05-11 20:12:03
如果問題現在已解決,請發佈自我回答並接受,這樣可以關閉:) – 2011-07-13 05:04:06