pes*_*kal 32 java eclipse eclipse-plugin eclipse-jdt
每次我调用IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)
并传递一个类CPE_PROJECT的IClasspathEntry时,它返回一个空列表.我暂停调试器并在Eclipse Display视图中运行以下行以查看发生了什么:
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[]) []
Run Code Online (Sandbox Code Playgroud)
类路径条目是Java项目的类路径的一部分,它的类型为CPE_PROJECT.此外,引用的Java项目(标题为"Some Project")至少有一个包含源的根.根据IJavaProject的javadoc,它似乎应该返回至少一个IPackageFragmentRoot,但它不会.
知道我在这里误会了什么吗?如何从CPE_PROJECT类型的IClasspathEntry获取IPackageFragmentRoots而不做一些hackish?(我的意思是,我可以从类路径条目中获取IJavaProject并遍历其原始类路径,忽略未导出的条目,以搜索IPackageFragmentRoots.)
这是 Eclipse 3.7 中修复的一个错误(请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367)。
根据新的 API:
结果不包括该项目的类路径上引用的其他项目中的包片段根。
归档时间: |
|
查看次数: |
1297 次 |
最近记录: |