32 votes

Pourquoi IJavaProject.findPackageFragmentRoots renvoie-t-il un tableau vide ?

Chaque fois que j'appelle IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) et lui passer un IClasspathEntry de type CPE_PROJECT, il renvoie une liste vide. J'ai mis en pause le débogueur et j'ai exécuté les lignes suivantes dans la vue Eclipse Display pour voir ce qui se passait :

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[]) []

L'entrée classpath fait partie du classpath du projet Java et est de type CPE_PROJECT. En outre, le projet Java référencé (intitulé "Some Project") possède au moins une racine contenant la source. Selon le javadoc pour IJavaProject il semble que cela devrait retourner au moins un IPackageFragmentRoot, mais ce n'est pas le cas.

Une idée de ce que je comprends mal ? Comment puis-je obtenir l'IPackageFragmentRoots à partir d'une IClasspathEntry de type CPE_PROJECT sans faire quelque chose de pirate (je veux dire, je pourrais obtenir l'IJavaProject à partir de l'entrée classpath et itérer dans son classpath brut, en ignorant les entrées non exportées, à la recherche de l'IPackageFragmentRoots).

0voto

pesckal Points 621

Il s'agissait d'un bogue qui a été corrigé dans Eclipse 3.7 (cf. https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 ).

Conformément à la nouvelle API :

Le résultat n'inclut pas les racines des fragments de paquet dans d'autres projets référencés sur le classpath de ce projet.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X