一直在 Visual Studio 下混, 最近開始寫 java, 於是用起了 eclipse, 很多地方都不錯
但是因為習慣了 vs 下的 "intellisense", 於是在 eclipse 下把補全的觸發(Auto activation triggers for Java )由 '.' 改為 'a-zA-Z.', 以類比之
總的來說, 表現與預期一致, 只有一個地方很彆扭, 即在聲明變數時, ide 會對變數名稱觸發補全, 而且該補全很容易被誤選中, 在實際使用中非常讓人困擾.
幸好 eclipse 是一個開源項目, 而且基於外掛程式機制, 為定製行為提供了很好的支援, 於是花了兩天時間, 研究了一下, 找到瞭解決方案, 提供如下, 獻給跟我一樣困擾的朋友:
1. 下載帶完整 source 的 eclipse, 比如 eclipse-SDK-3.6-win32
2. 進入 Plug-in Development 視圖
3. 找到 org.eclipse.jdt.core 包, 右鍵 Import As ... Source Project
4. 轉到匯入的項目: org.eclipse.jdt.core, 找到類 org.eclipse.jdt.internal.codeassist.CompletionEngine, 其中方法 completionOnFieldName 跟 completionOnLocalOrArgumentName 是跟聲明變數時變數名補全有關, 它們最終會調用到方法 findVariableName, 在該方法中定義有內部介面對象 INamingRequestor, 修改這個對象的 accept 方法可以影響到 JDT 對補全的最終處理
5. 我做了一個簡單的轉換, 即在 accept 函數頭插入一句 name = new char[] {}; 清除 JDT 傳入的補全結果, 從而取消了變數聲明時擾人的補全的提示
6. 修改完畢後, 在項目 org.eclipse.jdt.core 上右鍵 Export ... Deployable plug-ins and fragments, 把匯出的定製過的 org.eclipse.jdt.core 包覆蓋到 eclipse 的 plugins 下即解決問題