Bug 573710: Adapt to enhanced HandlerCollection

Change-Id: I8a7ab02b2ab0755673c24186eb890b0d15f999ca
diff --git a/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF
index 0caf382..102baa5 100644
--- a/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.nico.ui/META-INF/MANIFEST.MF
@@ -30,6 +30,7 @@
  org.eclipse.statet.ecommons.runtime.ui;bundle-version="[4.4.0,4.5.0)";visibility:=reexport
 Import-Package: com.ibm.icu.text;version="67.1.0",
  org.eclipse.statet.ecommons.collections;version="4.4.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0",
  org.eclipse.statet.ecommons.databinding,
  org.eclipse.statet.ecommons.databinding.core.observable;version="4.4.0",
  org.eclipse.statet.ecommons.debug.core.util,
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java
index 2b22368..1127062 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java
@@ -14,8 +14,6 @@
 
 package org.eclipse.statet.nico.ui.console;
 
-import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
-
 import static org.eclipse.statet.ecommons.ui.SharedUIResources.FIND_NEXT_COMMAND_ID;
 import static org.eclipse.statet.ecommons.ui.SharedUIResources.FIND_PREVIOUS_COMMAND_ID;
 import static org.eclipse.statet.ecommons.ui.actions.UIActions.ADDITIONS_GROUP_ID;
@@ -92,7 +90,6 @@
 import org.eclipse.ui.console.TextConsoleViewer;
 import org.eclipse.ui.console.actions.ClearOutputAction;
 import org.eclipse.ui.editors.text.EditorsUI;
-import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.menus.CommandContributionItem;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.part.IPageBookViewPage;
@@ -112,13 +109,13 @@
 import org.eclipse.statet.jcommons.ts.core.ActiveToolListener.ActiveToolEvent;
 import org.eclipse.statet.jcommons.ts.core.ToolProvider;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.preferences.PreferencesUtil;
 import org.eclipse.statet.ecommons.preferences.SettingsChangeNotifier.ChangeListener;
 import org.eclipse.statet.ecommons.text.ui.TextViewerAction;
 import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
 import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
 import org.eclipse.statet.ecommons.ui.SharedMessages;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.SimpleContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.UIActions;
@@ -655,12 +652,8 @@
 		this.inputServices= new NestedServices(pageServiceLocator, "ConsoleInput");
 		this.inputServices.bindToFocus(inputControl);
 		
-		final IHandlerService pageHandlerService= nonNullAssert(pageServiceLocator
-				.getService(IHandlerService.class) );
-		this.pageHandlers= new ContextHandlers(pageHandlerService);
-		final IHandlerService inputHandlerService= nonNullAssert(this.inputServices.getLocator()
-				.getService(IHandlerService.class) );
-		this.inputHandlers= new ContextHandlers(inputHandlerService);
+		this.pageHandlers= new ContextHandlers(pageServiceLocator);
+		this.inputHandlers= new ContextHandlers(this.inputServices.getLocator());
 		
 		this.multiActionHandler= new MultiActionHandler();
 		
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarView.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarView.java
index 5f1f3c6..6e62a82 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarView.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/variables/AppVarView.java
@@ -53,7 +53,6 @@
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.commands.IElementUpdater;
 import org.eclipse.ui.handlers.CollapseAllHandler;
-import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.menus.UIElement;
 import org.eclipse.ui.part.ViewPart;
@@ -67,10 +66,10 @@
 import org.eclipse.statet.jcommons.ts.core.Tool;
 import org.eclipse.statet.jcommons.ts.core.ToolProvider;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ts.ui.workbench.WorkbenchToolRegistry;
 import org.eclipse.statet.ecommons.ts.ui.workbench.WorkbenchToolRegistryListener;
 import org.eclipse.statet.ecommons.ts.ui.workbench.WorkbenchToolSessionData;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.UIActions;
 import org.eclipse.statet.ecommons.ui.components.StatusInfo;
@@ -257,7 +256,7 @@
 		final IViewSite site= getViewSite();
 		site.setSelectionProvider(treeSelectionProvider);
 		this.actionUtil= new ViewActionUtil(this);
-		this.handlers= new ContextHandlers(site.getService(IHandlerService.class));
+		this.handlers= new ContextHandlers(site);
 		initActions(site, this.handlers);
 		contributeToActionBars(site, site.getActionBars(), this.handlers);
 		hookContextMenu();
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserPage.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserPage.java
index 536b9a9..1bdac26 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserPage.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserPage.java
@@ -33,7 +33,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.mpbv.PageBookBrowserPage;
 import org.eclipse.statet.ecommons.ui.workbench.ContextHandlers;
diff --git a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserView.java b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserView.java
index babafbd..c51324b 100644
--- a/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserView.java
+++ b/r/org.eclipse.statet.r.apps/src/org/eclipse/statet/internal/r/apps/ui/viewer/AppBrowserView.java
@@ -24,7 +24,7 @@
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.UIActions;
 import org.eclipse.statet.ecommons.ui.mpbv.BrowserSession;
 import org.eclipse.statet.ecommons.ui.mpbv.PageBookBrowserPage;
diff --git a/r/org.eclipse.statet.r.console.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.console.ui/META-INF/MANIFEST.MF
index a0a4393..93e2f95 100644
--- a/r/org.eclipse.statet.r.console.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.console.ui/META-INF/MANIFEST.MF
@@ -27,6 +27,7 @@
  org.eclipse.jdt.launching,
  org.eclipse.jdt.debug.ui
 Import-Package: com.ibm.icu.text;version="67.1.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0",
  org.eclipse.statet.ecommons.databinding,
  org.eclipse.statet.ecommons.databinding.core.validation;version="4.4.0",
  org.eclipse.statet.ecommons.debug.core.util,
diff --git a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsolePage.java b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsolePage.java
index 53cbca9..77106a6 100644
--- a/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsolePage.java
+++ b/r/org.eclipse.statet.r.console.ui/src/org/eclipse/statet/internal/r/console/ui/page/RConsolePage.java
@@ -37,7 +37,7 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
@@ -143,7 +143,7 @@
 		
 		menuManager.insertBefore(ADDITIONS_GROUP_ID, new Separator("view")); //$NON-NLS-1$
 		
-		final RProcess process= (RProcess) getConsole().getProcess();
+		final RProcess process= getConsole().getProcess();
 		final REnv rEnv= process.getREnv();
 		if (process.isProvidingFeatureSet(RConsoleTool.R_DATA_FEATURESET_ID) && rEnv != null) {
 			menuManager.appendToGroup(NICO_CONTROL_MENU_ID,
diff --git a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
index bfaa459..41444b3 100644
--- a/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
+++ b/r/org.eclipse.statet.r.ui/META-INF/MANIFEST.MF
@@ -47,6 +47,7 @@
  org.eclipse.jetty.servlet;version="[10.0.2,10.1.0)",
  org.eclipse.jetty.util;version="[10.0.2,10.1.0)",
  org.eclipse.statet.ecommons.collections;version="4.4.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0",
  org.eclipse.statet.ecommons.databinding,
  org.eclipse.statet.ecommons.databinding.core.util;version="4.4.0",
  org.eclipse.statet.ecommons.databinding.core.validation;version="4.4.0",
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataEditor.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataEditor.java
index d0ae15a..a059db4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataEditor.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/dataeditor/RDataEditor.java
@@ -35,7 +35,6 @@
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.IShowInTargetList;
 import org.eclipse.ui.services.IServiceLocator;
@@ -238,7 +237,7 @@
 		final IWorkbenchPartSite site= getSite();
 		site.setSelectionProvider(this.viewer);
 		initActions(site,
-				this.handlers= new ContextHandlers(site.getService(IHandlerService.class)) );
+				this.handlers= new ContextHandlers(site) );
 		
 		initStatusLine();
 		initTableInput();
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/FilterClient.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/FilterClient.java
index 6cb3c4e..4e65081 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/FilterClient.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/FilterClient.java
@@ -75,6 +75,15 @@
 		});
 	}
 	
+	protected void onDispose() {
+		{	final var listener= this.resizeListener;
+			if (listener != null) {
+				this.resizeListener= null;
+				getParent().getContainer().getComposite().removeListener(SWT.Resize, listener);
+			}
+		}
+	}
+	
 	
 	@Override
 	@SuppressWarnings("null")
@@ -224,14 +233,4 @@
 		super.layout(changed, flags);
 	}
 	
-	
-	protected void onDispose() {
-		{	final var listener= this.resizeListener;
-			if (listener != null) {
-				this.resizeListener= null;
-				getParent().getContainer().getComposite().removeListener(SWT.Resize, listener);
-			}
-		}
-	}
-	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelFilterClient.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelFilterClient.java
index f1a4ed7..70185a2 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelFilterClient.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/LevelFilterClient.java
@@ -32,9 +32,9 @@
 
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.ui.actions.ControlServicesUtil;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.util.AutoCheckController;
+import org.eclipse.statet.ecommons.ui.workbench.ContextHandlers;
 
 import org.eclipse.statet.internal.r.ui.datafilter.LevelVariableFilter;
 import org.eclipse.statet.rj.data.RStore;
@@ -52,7 +52,7 @@
 	
 	private CheckboxTableViewer valueListViewer= nonNullLateInit();
 	
-	private final HandlerCollection valueListHandlers= new HandlerCollection();
+	private ContextHandlers valueListHandlers= nonNullLateInit();
 	private MenuManager valueListMenuManager= nonNullLateInit();
 	
 	
@@ -64,6 +64,20 @@
 		init(1);
 	}
 	
+	@Override
+	protected void onDispose() {
+		if (this.valueListMenuManager != null) {
+			this.valueListMenuManager.dispose();
+			this.valueListMenuManager= null;
+		}
+		if (this.valueListHandlers != null) {
+			this.valueListHandlers.dispose();
+			this.valueListHandlers= null;
+		}
+		
+		super.onDispose();
+	}
+	
 	
 	@Override
 	public LevelVariableFilter getFilter() {
@@ -84,12 +98,15 @@
 		final ControlServicesUtil servicesUtil= new ControlServicesUtil(serviceLocator,
 				getClass().getName() + "/ValueList#" + hashCode(), this ); //$NON-NLS-1$
 		servicesUtil.addControl(this.valueListViewer.getTable());
+		final var handlers= new ContextHandlers(serviceLocator);
+		handlers.setDefaultActivationExpression(servicesUtil.getExpression());
+		handlers.setDeactivateOnDisposal(true);
+		this.valueListHandlers= handlers;
 		
 		final AutoCheckController<?> autoCheckController= new AutoCheckController<>(
 				this.valueListViewer, this.filter.getSelectedValues() );
 		{	final IHandler2 handler= autoCheckController.createSelectAllHandler();
-			this.valueListHandlers.add(SELECT_ALL_COMMAND_ID, handler);
-			servicesUtil.activateHandler(SELECT_ALL_COMMAND_ID, handler);
+			handlers.addActivate(SELECT_ALL_COMMAND_ID, handler);
 		}
 		
 		this.valueListMenuManager= new MenuManager();
@@ -133,14 +150,4 @@
 		return updateLayout(this.valueListViewer, (int)this.availableValues.getLength());
 	}
 	
-	
-	@Override
-	protected void onDispose() {
-		if (this.valueListMenuManager != null) {
-			this.valueListMenuManager.dispose();
-			this.valueListMenuManager= null;
-		}
-		super.onDispose();
-	}
-	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextFilterClient.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextFilterClient.java
index bc13817..a5e7a3c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextFilterClient.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilterview/TextFilterClient.java
@@ -43,7 +43,6 @@
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.commands.IElementUpdater;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.menus.UIElement;
@@ -54,13 +53,13 @@
 
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
 import org.eclipse.statet.ecommons.ui.actions.ControlServicesUtil;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.components.DropDownButton;
 import org.eclipse.statet.ecommons.ui.components.SearchText;
 import org.eclipse.statet.ecommons.ui.util.AutoCheckController;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
 import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils;
+import org.eclipse.statet.ecommons.ui.workbench.ContextHandlers;
 import org.eclipse.statet.ecommons.ui.workbench.WorkbenchUIUtils;
 
 import org.eclipse.statet.internal.r.ui.datafilter.TextSearchType;
@@ -72,6 +71,9 @@
 public class TextFilterClient extends FilterClient<TextVariableFilter> {
 	
 	
+	private static final int SELECTION_DEPENDENT= 1 << 1;
+	
+	
 	private class RemoveHandler extends AbstractHandler implements IElementUpdater {
 		
 		@Override
@@ -155,7 +157,7 @@
 	
 	private CheckboxTableViewer valueListViewer= nonNullLateInit();
 	
-	private final HandlerCollection valueListHandlers= new HandlerCollection();
+	private ContextHandlers valueListHandlers= nonNullLateInit();
 	private MenuManager valueListMenuManager= nonNullLateInit();
 	
 	
@@ -168,6 +170,20 @@
 		init(2);
 	}
 	
+	@Override
+	protected void onDispose() {
+		if (this.valueListMenuManager != null) {
+			this.valueListMenuManager.dispose();
+			this.valueListMenuManager= null;
+		}
+		if (this.valueListHandlers != null) {
+			this.valueListHandlers.dispose();
+			this.valueListHandlers= null;
+		}
+		
+		super.onDispose();
+	}
+	
 	
 	@Override
 	public TextVariableFilter getFilter() {
@@ -237,24 +253,26 @@
 	@Override
 	protected void initActions(final IServiceLocator serviceLocator) {
 		final ControlServicesUtil servicesUtil= new ControlServicesUtil(serviceLocator,
-				getClass().getName()+"/ValueList#"+hashCode(), this ); //$NON-NLS-1$
+				getClass().getName() + "/ValueList#" + hashCode(), this ); //$NON-NLS-1$
 		servicesUtil.addControl(this.valueListViewer.getTable());
+		final var handlers= new ContextHandlers(serviceLocator);
+		handlers.setDefaultActivationExpression(servicesUtil.getExpression());
+		handlers.setDeactivateOnDisposal(true);
+		this.valueListHandlers= handlers;
 		
 		final AutoCheckController<?> autoCheckController= new AutoCheckController<>(
 				this.valueListViewer, this.selectedValueSet );
 		{	final IHandler2 handler= autoCheckController.createSelectAllHandler();
-			this.valueListHandlers.add(SELECT_ALL_COMMAND_ID, handler);
-			servicesUtil.activateHandler(SELECT_ALL_COMMAND_ID, handler);
+			handlers.addActivate(SELECT_ALL_COMMAND_ID, handler);
 		}
 		{	final IHandler2 handler= new RemoveHandler();
-			this.valueListHandlers.add(REMOVE_COMMAND_ID, handler);
-			servicesUtil.activateHandler(IWorkbenchCommandConstants.EDIT_DELETE, handler);
+			handlers.addActivate(REMOVE_COMMAND_ID, handler, SELECTION_DEPENDENT);
 		}
 		{	final IHandler2 handler= new RemoveUncheckedHandler();
-			this.valueListHandlers.add(REMOVE_UNCHECKED_HANDLER_ID, handler);
+			handlers.add(REMOVE_UNCHECKED_HANDLER_ID, handler);
 		}
 		{	final IHandler2 handler= new RemoveAllHandler();
-			this.valueListHandlers.add(REMOVE_ALL_HANDLER_COMMAND_ID, handler);
+			handlers.add(REMOVE_ALL_HANDLER_COMMAND_ID, handler);
 		}
 		
 		ViewerUtils.installSearchTextNavigation(this.valueListViewer, this.searchTextControl, true);
@@ -262,23 +280,23 @@
 		this.valueListMenuManager= new MenuManager();
 		this.valueListMenuManager.add(new HandlerContributionItem(new CommandContributionItemParameter(serviceLocator,
 						null, SELECT_ALL_COMMAND_ID, HandlerContributionItem.STYLE_PUSH),
-				nonNullAssert(this.valueListHandlers.get(SELECT_ALL_COMMAND_ID)) ));
+				nonNullAssert(handlers.get(SELECT_ALL_COMMAND_ID)) ));
 		this.valueListMenuManager.add(new Separator());
 		this.valueListMenuManager.add(new HandlerContributionItem(new CommandContributionItemParameter(serviceLocator,
 						null, REMOVE_COMMAND_ID, HandlerContributionItem.STYLE_PUSH),
-				nonNullAssert(this.valueListHandlers.get(REMOVE_COMMAND_ID)) ));
+				nonNullAssert(handlers.get(REMOVE_COMMAND_ID)) ));
 		this.valueListMenuManager.add(new HandlerContributionItem(new CommandContributionItemParameter(serviceLocator,
 						null, HandlerContributionItem.NO_COMMAND_ID, null,
 						null, null, null,
 						Messages.Items_RemoveUnchecked_label, null, "Remove unchecked items",
 						HandlerContributionItem.STYLE_PUSH, null, false),
-				nonNullAssert(this.valueListHandlers.get(REMOVE_UNCHECKED_HANDLER_ID)) ));
+				nonNullAssert(handlers.get(REMOVE_UNCHECKED_HANDLER_ID)) ));
 		this.valueListMenuManager.add(new HandlerContributionItem(new CommandContributionItemParameter(serviceLocator,
 						null, HandlerContributionItem.NO_COMMAND_ID, null,
 						null, null, null,
 						Messages.Items_RemoveAll_label, null, "Remove all items",
 						HandlerContributionItem.STYLE_PUSH, null, false),
-				nonNullAssert(this.valueListHandlers.get(REMOVE_ALL_HANDLER_COMMAND_ID)) ));
+				nonNullAssert(handlers.get(REMOVE_ALL_HANDLER_COMMAND_ID)) ));
 		this.valueListViewer.getTable().setMenu(
 				this.valueListMenuManager.createContextMenu(this.valueListViewer.getControl()) );
 		
@@ -313,7 +331,7 @@
 	}
 	
 	protected void updateActions() {
-		this.valueListHandlers.get(REMOVE_COMMAND_ID).setEnabled(null);
+		this.valueListHandlers.update(null, SELECTION_DEPENDENT);
 	}
 	
 	@Override
@@ -347,12 +365,4 @@
 		this.filter.search(type, text);
 	}
 	
-	@Override
-	protected void onDispose() {
-		if (this.valueListMenuManager != null) {
-			this.valueListMenuManager.dispose();
-			this.valueListMenuManager= null;
-		}
-	}
-	
 }
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java
index a885561..4c90b42 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/ROutlinePage.java
@@ -31,9 +31,9 @@
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.SharedMessages;
 import org.eclipse.statet.ecommons.ui.SharedUIResources;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java
index cbc65ee..6e90eec 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/pkgmanager/PkgTab.java
@@ -83,7 +83,6 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.ui.IWorkbenchCommandConstants;
-import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 
 import org.eclipse.statet.ecommons.databinding.jface.DataBindingSupport;
@@ -785,7 +784,7 @@
 		this.serviceLocator= new NestedServices(this.dialog.getServiceLocator(), "Tab");
 		this.serviceLocator.bindTo(this);
 		
-		this.handlers= new ContextHandlers(this.serviceLocator.getLocator().getService(IHandlerService.class));
+		this.handlers= new ContextHandlers(this.serviceLocator.getLocator());
 		
 		{	final IHandler2 handler= new AbstractHandler() {
 				@Override
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java
index 4a89c6c..02a88aa 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java
@@ -72,8 +72,9 @@
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.services.IServiceLocator;
 
+import org.eclipse.statet.ecommons.commands.core.BasicHandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.SharedUIResources;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.SimpleContributionItem;
 import org.eclipse.statet.ecommons.ui.mpbv.BrowserHandler.IBrowserProvider;
@@ -162,7 +163,7 @@
 	private StyledText titleText;
 	private Browser infoBrowser;
 	
-	private final HandlerCollection handlerCollection= new HandlerCollection();
+	private final HandlerCollection handlerCollection= new BasicHandlerCollection();
 	
 	private boolean layoutWorkaround;
 	private boolean layoutHint;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java
index 1b9dfd7..d7d9aba 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpView.java
@@ -63,10 +63,10 @@
 import org.eclipse.statet.jcommons.status.StatusException;
 import org.eclipse.statet.jcommons.status.eplatform.EStatusUtils;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.preferences.core.util.PreferenceUtils;
 import org.eclipse.statet.ecommons.text.TextUtil;
 import org.eclipse.statet.ecommons.ui.SharedUIResources;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.SimpleContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.ToggleBooleanPreferenceHandler;
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/assist/RElementInfoControl.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/assist/RElementInfoControl.java
index 34382f0..e6848d0 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/assist/RElementInfoControl.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/debug/ui/assist/RElementInfoControl.java
@@ -45,8 +45,8 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.services.IServiceLocator;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.SharedUIResources;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.SimpleContributionItem;
 import org.eclipse.statet.ecommons.ui.util.InformationDispatchHandler;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
diff --git a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ObjectBrowserView.java b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ObjectBrowserView.java
index 65002ff..b2e7524 100644
--- a/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ObjectBrowserView.java
+++ b/r/org.eclipse.statet.r.ui/srcDebug/org/eclipse/statet/internal/r/objectbrowser/ObjectBrowserView.java
@@ -64,7 +64,6 @@
 import org.eclipse.ui.commands.IElementUpdater;
 import org.eclipse.ui.contexts.IContextService;
 import org.eclipse.ui.handlers.CollapseAllHandler;
-import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.menus.UIElement;
 import org.eclipse.ui.part.ViewPart;
@@ -82,11 +81,11 @@
 import org.eclipse.statet.jcommons.ts.core.Tool;
 import org.eclipse.statet.jcommons.ts.core.ToolProvider;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.models.core.util.ElementPartition;
 import org.eclipse.statet.ecommons.ts.ui.workbench.WorkbenchToolRegistry;
 import org.eclipse.statet.ecommons.ts.ui.workbench.WorkbenchToolRegistryListener;
 import org.eclipse.statet.ecommons.ts.ui.workbench.WorkbenchToolSessionData;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.SearchContributionItem;
 import org.eclipse.statet.ecommons.ui.actions.UIActions;
@@ -466,7 +465,7 @@
 		final IViewSite site= getViewSite();
 		site.setSelectionProvider(treeSelectionProvider);
 		this.actionUtil= new ViewActionUtil(this);
-		this.handlers= new ContextHandlers(site.getService(IHandlerService.class));
+		this.handlers= new ContextHandlers(site);
 		initActions(site, this.handlers);
 		contributeToActionBars(site, site.getActionBars(), this.handlers);
 		hookContextMenu();
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/META-INF/MANIFEST.MF b/redocs/org.eclipse.statet.redocs.tex.r/META-INF/MANIFEST.MF
index 9f9d0cc..ac8174f 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/META-INF/MANIFEST.MF
+++ b/redocs/org.eclipse.statet.redocs.tex.r/META-INF/MANIFEST.MF
@@ -28,6 +28,7 @@
  org.eclipse.statet.nico.ui,
  org.eclipse.statet.r.console.ui
 Import-Package: com.ibm.icu.text;version="67.1.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0",
  org.eclipse.statet.ecommons.databinding,
  org.eclipse.statet.ecommons.debug.core.util,
  org.eclipse.statet.ecommons.io,
diff --git a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java
index ae936bc..0eaf59c 100644
--- a/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java
+++ b/redocs/org.eclipse.statet.redocs.tex.r/src/org/eclipse/statet/internal/redocs/tex/r/ui/editors/LtxRweaveOutlinePage.java
@@ -43,7 +43,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/META-INF/MANIFEST.MF b/redocs/org.eclipse.statet.redocs.wikitext.r/META-INF/MANIFEST.MF
index 0463696..cab9787 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/META-INF/MANIFEST.MF
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/META-INF/MANIFEST.MF
@@ -30,6 +30,7 @@
  org.eclipse.statet.nico.ui,
  org.eclipse.statet.r.console.ui
 Import-Package: com.ibm.icu.text;version="67.1.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0",
  org.eclipse.statet.ecommons.databinding,
  org.eclipse.statet.ecommons.io,
  org.eclipse.statet.ecommons.models,
diff --git a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java
index 84a7182..2fb326f 100644
--- a/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java
+++ b/redocs/org.eclipse.statet.redocs.wikitext.r/src/org/eclipse/statet/internal/redocs/wikitext/r/ui/editors/WikidocRweaveOutlinePage.java
@@ -43,7 +43,7 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 import org.eclipse.statet.ecommons.ui.dialogs.DialogUtils;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/META-INF/MANIFEST.MF b/rtm/org.eclipse.statet.rtm.base.ui/META-INF/MANIFEST.MF
index 13e4815..d1ff38c 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/META-INF/MANIFEST.MF
+++ b/rtm/org.eclipse.statet.rtm.base.ui/META-INF/MANIFEST.MF
@@ -32,6 +32,7 @@
  org.eclipse.statet.ide.ui,
  org.eclipse.statet.r.ui
 Import-Package: com.ibm.icu.text;version="67.1.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0",
  org.eclipse.statet.ecommons.databinding;version="4.4.0",
  org.eclipse.statet.ecommons.databinding.core;version="4.4.0",
  org.eclipse.statet.ecommons.graphics.core,
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EFEditor.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EFEditor.java
index 816adf5..0179384 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EFEditor.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/ecommons/emf/ui/forms/EFEditor.java
@@ -115,8 +115,9 @@
 import org.eclipse.ui.views.properties.PropertySheet;
 import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
 
+import org.eclipse.statet.ecommons.commands.core.BasicHandlerCollection;
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.emf.core.util.RuleSet;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 
 import org.eclipse.statet.internal.ecommons.emf.ui.forms.CopyEObjectHandler;
 import org.eclipse.statet.internal.ecommons.emf.ui.forms.CutEObjectHandler;
@@ -875,7 +876,7 @@
 			}
 		});
 		
-		this.handlers= new HandlerCollection();
+		this.handlers= new BasicHandlerCollection();
 		createActions(getSite(), this.handlers);
 	}
 	
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/editors/RTaskEditor.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/editors/RTaskEditor.java
index c5515b0..cde5142 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/editors/RTaskEditor.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/editors/RTaskEditor.java
@@ -29,8 +29,8 @@
 import org.eclipse.ui.services.IServiceLocator;
 import org.eclipse.ui.statushandlers.StatusManager;
 
+import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.emf.ui.forms.EFEditor;
-import org.eclipse.statet.ecommons.ui.actions.HandlerCollection;
 import org.eclipse.statet.ecommons.ui.actions.HandlerContributionItem;
 
 import org.eclipse.statet.internal.rtm.base.ui.actions.RunRTaskHandler;
diff --git a/rtm/org.eclipse.statet.rtm.ftable.ui/META-INF/MANIFEST.MF b/rtm/org.eclipse.statet.rtm.ftable.ui/META-INF/MANIFEST.MF
index 3f09393..288b8c1 100644
--- a/rtm/org.eclipse.statet.rtm.ftable.ui/META-INF/MANIFEST.MF
+++ b/rtm/org.eclipse.statet.rtm.ftable.ui/META-INF/MANIFEST.MF
@@ -17,4 +17,5 @@
  org.eclipse.statet.rtm.base.ui;bundle-version="[4.4.0,4.5.0)",
  org.eclipse.statet.r.ui;bundle-version="[4.4.0,4.5.0)"
 Import-Package: org.eclipse.statet.jcommons.collections;version="4.4.0",
- org.eclipse.statet.jcommons.lang;version="4.4.0"
+ org.eclipse.statet.jcommons.lang;version="4.4.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0"
diff --git a/rtm/org.eclipse.statet.rtm.ggplot.ui/META-INF/MANIFEST.MF b/rtm/org.eclipse.statet.rtm.ggplot.ui/META-INF/MANIFEST.MF
index 1bbd6a5..942d536 100644
--- a/rtm/org.eclipse.statet.rtm.ggplot.ui/META-INF/MANIFEST.MF
+++ b/rtm/org.eclipse.statet.rtm.ggplot.ui/META-INF/MANIFEST.MF
@@ -19,4 +19,5 @@
  org.eclipse.statet.rtm.base.ui;bundle-version="[4.4.0,4.5.0)",
  org.eclipse.statet.r.ui;bundle-version="[4.4.0,4.5.0)"
 Import-Package: org.eclipse.statet.jcommons.collections;version="4.4.0",
- org.eclipse.statet.jcommons.lang;version="4.4.0"
+ org.eclipse.statet.jcommons.lang;version="4.4.0",
+ org.eclipse.statet.ecommons.commands.core;version="4.4.0"