2010-07-27 11 views
32

Ogni volta che chiamo IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) e gli passiamo un IClasspathEntry di tipo CPE_PROJECT, restituisce una lista vuota. Mi fermai il debugger e corse le seguenti righe nella Eclipse display per vedere cosa stava succedendo:Perché IJavaProject.findPackageFragmentRoots restituisce un array vuoto?

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'entrata classpath fa parte del percorso di classe del progetto Java ed è di tipo CPE_PROJECT. Inoltre, il progetto Java di riferimento (intitolato "Alcuni progetti") ha almeno una radice contenente l'origine. Secondo lo javadoc for IJavaProject, sembra che questo dovrebbe restituire almeno un IPackageFragmentRoot, ma non è così.

Qualche idea di cosa sto fraintendendo qui? Come posso ottenere IPackageFragmentRoots da un IClasspathEntry di tipo CPE_PROJECT senza fare qualcosa di hackish? (Voglio dire, potrei ottenere IJavaProject dalla voce classpath e scorrere il suo classpath raw, ignorando le voci non esportate, in cerca di IPackageFragmentRoots.)

+3

Un bug è stata depositata: https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 – peskal

+8

il bug è stato corretto. Ha risolto il tuo problema? –

+0

Se il problema è stato risolto, si prega di postare l'auto-risposta e accettare in modo che questo possa essere chiuso :) –

risposta

Problemi correlati