Cada vez que llamo al IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)
y le paso un IClasspathEntry del tipo CPE_PROJECT, devuelve una lista vacía. Hice una pausa el depurador y corrí las siguientes líneas en la vista de pantalla Eclipse para ver lo que estaba pasando:¿Por qué IJavaProject.findPackageFragmentRoots devuelve una matriz vacía?
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[]) []
La entrada de ruta de clases es parte de la ruta de clase del proyecto Java y es de tipo CPE_PROJECT. Además, el proyecto de Java al que se hace referencia (titulado "Some Project") tiene al menos una raíz que contiene la fuente. De acuerdo con javadoc for IJavaProject, parece que esto debería devolver al menos un IPackageFragmentRoot, pero no es así.
¿Alguna idea de lo que estoy malentendiendo aquí? ¿Cómo puedo obtener el IPackageFragmentRoots de un IClasspathEntry del tipo CPE_PROJECT sin hacer algo hackish? (Es decir, podría obtener el IJavaProject de la entrada classpath e iterar a través de su classpath sin formato, ignorando las entradas no exportadas, en busca de IPackageFragmentRoots)
Un error se ha presentado: https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 – peskal
el error se ha corregido. ¿Solucionó tu problema? –
Si el problema ya está solucionado, publique la auto-respuesta y acepte para que se cierre :) –