2010-07-27 92 views
32

每次我拨打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。)

+3

的bug已经提交:https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 – peskal 2010-09-05 04:45:46

+8

的bug已被修正。它解决了你的问题吗? – 2011-05-11 20:12:03

+0

如果问题现在已解决,请发布自我回答并接受,这样可以关闭:) – 2011-07-13 05:04:06

回答

相关问题