Pertanyaan Mengapa IJavaProject.findPackageFragmentRoots mengembalikan larik kosong?


Setiap kali saya menelepon IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) dan menyebarkannya IClasspathEntry dari jenis CPE_PROJECT, ia mengembalikan daftar kosong. Saya menghentikan debugger dan menjalankan baris berikut di tampilan Tampilan Eclipse untuk melihat apa yang sedang terjadi:

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

Entri classpath adalah bagian dari classpath proyek Java dan itu semacam CPE_PROJECT. Selain itu, proyek Java yang direferensikan (berjudul "Some Project") memiliki setidaknya satu sumber yang mengandung root. Menurut javadoc untuk IJavaProject, tampaknya ini harus mengembalikan setidaknya satu IPackageFragmentRoot, tetapi tidak.

Tahu apa yang saya salah paham di sini? Bagaimana saya bisa mendapatkan IPackageFragmentRoots dari IClasspathEntry dari jenis CPE_PROJECT tanpa melakukan sesuatu hackish? (Maksud saya, saya bisa mendapatkan IJavaProject dari entri classpath dan iterate melalui classpath mentahnya, mengabaikan entri yang tidak diekspor, untuk mencari IPackageFragmentRoots.)


32
2017-07-27 02:26


asal


Jawaban:


Ini adalah bug yang diperbaiki di Eclipse 3.7 (lihat https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367).

Sesuai API baru:

Hasilnya tidak termasuk akar fragmen paket dalam proyek lain yang direferensikan pada jalur kelas proyek ini.

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


0
2017-07-23 20:55