2010-07-27 2 views
32

Chaque fois que j'appelle IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) et lui passe un IClasspathEntry de type CPE_PROJECT, il renvoie une liste vide. Je me suis arrêté le débogueur et a couru les lignes suivantes dans l'affichage Eclipse pour voir ce qui se passait:Pourquoi IJavaProject.findPackageFragmentRoots renvoie-t-il un tableau vide?

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 il est de CPE_PROJECT genre. De plus, le projet Java référencé (intitulé "Some Project") a au moins une source contenant la racine. Selon le javadoc for 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 suis mal comprendre ici? Comment puis-je obtenir le IPackageFragmentRoots à partir d'un IClasspathEntry de type CPE_PROJECT sans faire quelque chose de hackish? (Je veux dire, je pourrais obtenir le IJavaProject de l'entrée classpath et parcourir son chemin de classe brut, en ignorant les entrées non exportées, à la recherche de IPackageFragmentRoots.)

+3

Un bug a été déposé: https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 – peskal

+8

le bug a été corrigé. Cela a-t-il résolu votre problème? –

+0

Si le problème est maintenant résolu, s'il vous plaît postez self-answer et acceptez donc cela peut être fermé :) –

Répondre

Questions connexes