首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Eclipse UI 精簡三大招:plugin.xml 條件貢獻、Activities 屏蔽擴展、代碼動態控制活動狀態

     編輯:Java 相關知識

Eclipse 插件越裝越多,菜單/工具欄/右鍵菜單被無關項目佔滿。本文提供三種層層遞進的精簡方案:聲明式過濾、Activities 機制屏蔽、運行時動態啟用/禁用。

方案一:plugin.xml 條件式貢獻

利用 org.eclipse.ui.popupMenus 的 objectContribution 替代無條件 action,通過 nameFilter、objectClass 限定顯示條件。

<extension point="org.eclipse.ui.popupMenus">
  <objectContribution
      id="my.example.objectContribution"
      nameFilter="*example*"
      objectClass="java.io.File">
    <action class="my.example.MyAction" id="my.example.MyAction" label="Exe" menubarPath="additional"/>
  </objectContribution>
</extension>

僅當選中資源路徑含 "example" 或對象 toString() 含關鍵字時顯示。

方案二:Activities 擴展點屏蔽

定義 activity + activityPatternBinding,匹配目標擴展 ID(格式:pluginId/localId),將其標記為 disabled。預設 activity 為 disabled,匹配的擴展自動隱藏。

<extension point="org.eclipse.ui.activities">
  <activity id="my.example.activity" name="WizardActivity"/>
  <activityPatternBinding activityId="my.example.activity" pattern="my\.example/mywizard"/>
</extension>

pattern 支援正則,可批量屏蔽。

方案三:代碼動態控制 Activity 啟用狀態

根據業務標誌位(如 licence、用戶角色)運行時切換:

IWorkbenchActivitySupport support = PlatformUI.getWorkbench().getActivitySupport();
IActivityManager manager = support.getActivityManager();
Set<String> enabled = new HashSet<>(manager.getEnabledActivityIds());

if (flag == 1) {
    if (enabled.add("my.example.activity")) support.setEnabledActivityIds(enabled);
} else {
    if (enabled.remove("my.example.activity")) support.setEnabledActivityIds(enabled);
}

實現「有許可證顯示高級功能、無許可證隱藏」等動態 UI 需求。

選型指南

方案適用場景優點缺點
plugin.xml 條件靜態、基於選中對象類型/名稱聲明式、無代碼、性能最好無法動態運行時切換
Activities 屏蔽需屏蔽第三方插件擴展、批量管理不改第三方代碼、支援正則批量靜態、需預先知道擴展 ID
代碼動態控制運行時根據業務狀態顯示/隱藏完全動態、可綁定許可/角色需編寫啟動代碼、輕微性能開銷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved