簡體   English   中英

為什么IJavaProject.findPackageFragmentRoots返回一個空數組?

[英]Why is IJavaProject.findPackageFragmentRoots returning an empty array?

每次我調用IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe)並傳遞一個類CPE_PROJECT的IClasspathEntry時,它返回一個空列表。 我暫停調試器並在Eclipse Display視圖中運行以下行以查看發生了什么:

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

類路徑條目是Java項目的類路徑的一部分,它的類型為CPE_PROJECT。 此外,引用的Java項目(標題為“Some Project”)至少有一個包含源的根。 根據IJavaProjectjavadoc ,它似乎應該返回至少一個IPackageFragmentRoot,但它不會。

知道我在這里誤會了什么嗎? 如何從CPE_PROJECT類型的IClasspathEntry獲取IPackageFragmentRoots而不做一些hackish? (我的意思是,我可以從類路徑條目中獲取IJavaProject並遍歷其原始類路徑,忽略未導出的條目,以搜索IPackageFragmentRoots。)

這是Eclipse 3.7中修復的錯誤(請參閱https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367 )。

根據新API:

結果不包括在此項目的類路徑中引用的其他項目中的包片段根。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM