Почему IJavaProject.findPackageFragmentRoots возвращает пустой массив?

Каждый раз я звоню IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) и передайте его IClasspathEntry доброго CPE_PROJECT, это возвращает пустой список. Я приостановил отладчик и выполнил следующие строки в представлении 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[]) []

Запись пути к классу является частью пути к классу проекта Java, и это - вид CPE_PROJECT. Кроме того, проект Java, на который ссылаются (названный "Некоторый Проект") имеет по крайней мере один корень, содержащий источник. Согласно javadoc для IJavaProject, кажется, что это должно возвратить по крайней мере один IPackageFragmentRoot, но не делает.

Какая-либо идея, что я неправильно понимаю здесь? Как я могу получить IPackageFragmentRoots от IClasspathEntry доброго CPE_PROJECT, не делая чего-то hackish? (Я имею в виду, я мог получить IJavaProject от записи пути к классу и выполнить итерации через ее необработанный путь к классу, игнорируя неэкспортируемые записи, в поисках IPackageFragmentRoots.)

32
задан peskal 31 July 2010 в 00:26
поделиться