2010-07-27 43 views
32

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)

+3

Un error se ha presentado: https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 – peskal

+8

el error se ha corregido. ¿Solucionó tu problema? –

+0

Si el problema ya está solucionado, publique la auto-respuesta y acepte para que se cierre :) –

Respuesta

Cuestiones relacionadas