Подтвердить что ты не робот

Почему 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[]) []

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

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

4b9b3361

Ответ 1

Это была ошибка, которая была исправлена ​​в Eclipse 3.7 (см. https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367).

В соответствии с новым API:

Результат не включает корни фрагмента пакета в других проектах, на которые ссылается этот путь к классу проекта.

См. http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/IJavaProject.html