2015-04-03 56 views
0

我開發一個Eclipse插件,其中,在啓動時,需要經過所有工作區中開放的Java項目,獲得那些每類路徑解析並用它做什麼通知。我到目前爲止的代碼看起來是這樣的:時得到一個Eclipse IJavaProject的類路徑可以解決

public void start(BundleContext context) throws Exception { 
    for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) { 
     if (project.isOpen() && project.getNature(JavaCore.NATURE_ID) != null) { 
      IJavaProject javaProject = JavaCore.create(project); 
      for (IClasspathEntry cpe : javaProject.getResolvedClasspath(true)) { 
       // Do something with cpe 
      } 
     } 
    } 
} 

的問題是,在工作區IJavaProject.getResolvedClasspath(true)一些項目最初將返回一個空的類路徑。我的猜測是這些項目尚未完全加載。

我也有一個IResourceChangeListener來監聽項目的開/關和做同樣的事情,什麼是在啓動時完成。當我關閉並重新打開一個項目時,最初有一個空的類路徑IJavaProject.getResolvedClasspath(true)將返回預期的類路徑。

是我的假設是正確的,這些項目還沒有被完全加載了嗎?我應該如何重新設計這個以在我的插件啓動時爲所有Java項目獲得正確解析的類路徑?

回答

0

從Eclipse JDT源代碼中自行繪製出來。如果類路徑正在被另一個線程解析,則IJavaProject.getResolvedClasspath(boolean)確實可以返回空類路徑。在嘗試獲取項目已解析的類路徑之前,添加對JavaCore.initializeAfterLoad(IProgressMonitor)的調用似乎有訣竅。