Eclipse Plugin 升級遇到的一些問題(1)

     最近的工作重點是公司內部開發工具的升級。公司的開發工具是以eclipse3.0爲基礎開發的插件。之前已經做過一次升級,eclipse的版本升級到了3.2.現在的新需求是要升級到最新版本--Eclipse4.2。因爲來公司比較晚,沒有參與插件的開發,而且之前也沒接觸過插件的開發。現在接收升級的工作,有點無從下手。在此記錄一下這一個月來在升級過程中遇到的一些問題。

   目前的進度是從3.2升級到3.5:

   首先遇到的錯誤是打開編輯器時,報錯:
java.lang.IncompatibleClassChangeError: Expected static method org.eclipse.jdt.internal.core.UserLibraryManager.getUserLibraryNames()
 
   日誌的意思就是期望getUserLibraryNames()方法是靜態的。通過查看API發現eclipse3.2時,UserLibraryManager之中的getUserLibraryNames()是靜態的,而到eclipse3.5時,此方法變成了非靜態的。
    而插件的開發過程中,需要取得userLibraryName,調用了此方法,調用如下:
 
  1. String[] names = UserLibraryManager.getUserLibraryNames(); 
 
對於靜態的方法,我們無需實例化對象,就可以向上面一樣直接調用這個方法。
但對於非靜態方法,我們就必須先實例化對象,才能調用方法。但這時候問題也就產生了。如過我們這樣做:
 
 
  1. UserLibraryManager userLibraryManager=new UserLibraryManager();  
  2. String[] names = userLibraryManager.getUserLibraryNames(); 
 
有什麼問題嗎?這樣我們可以保證整個過程中用到的是一個UserLibraryManager嗎?顯然不能保證,而且也不會是一個UserLibraryManager。實際上這樣我們得到的應該是Null。
那該怎麼辦呢,我們應該設法先得到一個UserLibraryManager,而且不能通過實例化的方法,要保證對象的唯一性。
 

在JavaModelManager中我們可以看到

 

  1.  public static UserLibraryManager getUserLibraryManager()  
  2. {  
  3. … …  

方法。所以我們可以通過JavaModelManager來獲得一個UserLibraryManager

最終修改爲:

 

  1. UserLibraryManager userLibraryManager = JavaModelManager.getUserLibraryManage();   
  2. String[] names = userLibraryManager.getUserLibraryNames(); 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章