¿Por qué es IJavaProject.findPackageFragmentRoots devolviendo una matriz vacía?


Cada vez que llamo a IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) y le paso un IClasspathEntry del tipo CPE_PROJECT, devuelve una lista vacía. Pausé el depurador y corrí las siguientes líneas en la vista de visualización de Eclipse para ver lo que estaba pasando:

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 classpath es parte del classpath del proyecto Java y es del tipo CPE_PROJECT. Además, el proyecto Java referenciado (titulado "Some Project") tiene al menos una raíz que contiene el código fuente. De acuerdo con el javadoc para IJavaProject , parece que esto debe devolver al menos un IPackageFragmentRoot, pero no lo hace.

¿Alguna idea de lo que estoy malinterpretando aquí? ¿Cómo puedo obtener el IPackageFragmentRoots de un IClasspathEntry de tipo CPE_PROJECT sin hacer algo hackish? (Quiero decir, podría obtener el IJavaProject de la entrada classpath e iterar a través de su ruta de clase raw, ignorando las entradas no exportadas, en busca de IPackageFragmentRoots.)

Author: peskal, 2010-07-27

1 answers

Este fue un error que se solucionó en Eclipse 3.7 (ver https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367).

Según la nueva API:

El resultado no incluye raíces de fragmentos de paquetes en otros proyectos referenciados en el classpath de este proyecto.

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

 0
Author: peskal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-15 07:00:34