blob: 3f4b5ee88e7a3847983768fe110583b7252c9e8d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Remy Chi Jian Suen <remy.suen@gmail.com> - Bug 221662 [Contributions] Extension point org.eclipse.ui.menus: sub menu contribution does not have icon even if specified
* Christian Walther (Indel AG) - Bug 398631: Use correct menu item icon from commandImages
* Christian Walther (Indel AG) - Bug 384056: Use disabled icon from extension definition
* Axel Richard <axel.richard@obeo.fr> - Bug 392457
*******************************************************************************/
package org.eclipse.ui.internal.menus;
import java.util.ArrayList;
import java.util.Map;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.e4.core.contexts.ContextFunction;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer;
import org.eclipse.e4.ui.internal.workbench.RenderedElementUtil;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.MApplicationElement;
import org.eclipse.e4.ui.model.application.commands.MCommand;
import org.eclipse.e4.ui.model.application.commands.MParameter;
import org.eclipse.e4.ui.model.application.commands.impl.CommandsFactoryImpl;
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement;
import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
import org.eclipse.e4.ui.model.application.ui.menu.MTrimContribution;
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
import org.eclipse.e4.ui.services.help.EHelpService;
import org.eclipse.e4.ui.workbench.IWorkbench;
import org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.activities.IActivityManager;
import org.eclipse.ui.activities.IIdentifier;
import org.eclipse.ui.activities.IIdentifierListener;
import org.eclipse.ui.activities.IWorkbenchActivitySupport;
import org.eclipse.ui.activities.IdentifierEvent;
import org.eclipse.ui.commands.ICommandImageService;
import org.eclipse.ui.internal.IWorkbenchConstants;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
import org.eclipse.ui.internal.services.ServiceLocator;
import org.eclipse.ui.menus.CommandContributionItem;
public class MenuAdditionCacheEntry {
private static final String AFTER_ADDITIONS = "after=additions"; //$NON-NLS-1$
static final String TRIM_COMMAND1 = "org.eclipse.ui.trim.command1"; //$NON-NLS-1$
static final String TRIM_COMMAND2 = "org.eclipse.ui.trim.command2"; //$NON-NLS-1$
static final String TRIM_VERTICAL1 = "org.eclipse.ui.trim.vertical1"; //$NON-NLS-1$
static final String TRIM_VERTICAL2 = "org.eclipse.ui.trim.vertical2"; //$NON-NLS-1$
static final String TRIM_STATUS = "org.eclipse.ui.trim.status"; //$NON-NLS-1$
/**
* Test whether the location URI is in one of the pre-defined workbench trim
* areas.
*
* @param location
* @return true if the URI is in workbench trim area.
*/
static boolean isInWorkbenchTrim(MenuLocationURI location) {
final String path = location.getPath();
return IWorkbenchConstants.MAIN_TOOLBAR_ID.equals(path) || TRIM_COMMAND1.equals(path)
|| TRIM_COMMAND2.equals(path)
|| TRIM_VERTICAL1.equals(path) || TRIM_VERTICAL2.equals(path) || TRIM_STATUS.equals(path);
}
private MApplication application;
// private IEclipseContext appContext;
private IConfigurationElement configElement;
private MenuLocationURI location;
private String namespaceIdentifier;
private IActivityManager activityManager;
public MenuAdditionCacheEntry(MApplication application, IEclipseContext appContext,
IConfigurationElement configElement, String attribute, String namespaceIdentifier) {
this.application = application;
// this.appContext = appContext;
assert appContext.equals(this.application.getContext());
this.configElement = configElement;
this.location = new MenuLocationURI(attribute);
this.namespaceIdentifier = namespaceIdentifier;
IWorkbenchActivitySupport activitySupport = application.getContext().get(IWorkbenchActivitySupport.class);
activityManager = activitySupport.getActivityManager();
}
private boolean inToolbar() {
return location.getScheme().startsWith("toolbar"); //$NON-NLS-1$
}
public void mergeIntoModel(ArrayList<MMenuContribution> menuContributions,
ArrayList<MToolBarContribution> toolBarContributions, ArrayList<MTrimContribution> trimContributions) {
boolean hasAdditions = false;
if ("menu:help?after=additions".equals(location.toString())) { //$NON-NLS-1$
IConfigurationElement[] menus = configElement.getChildren(IWorkbenchRegistryConstants.TAG_MENU);
if (menus.length == 1 && "org.eclipse.update.ui.updateMenu".equals(MenuHelper.getId(menus[0]))) { //$NON-NLS-1$
return;
}
}
if (location.getPath() == null || location.getPath().isEmpty()) {
WorkbenchPlugin.log("MenuAdditionCacheEntry.mergeIntoModel: Invalid menu URI: " + location); //$NON-NLS-1$
return;
}
if (inToolbar()) {
if (isInWorkbenchTrim(location)) {
processTrimChildren(trimContributions, toolBarContributions, configElement);
} else {
String query = location.getQuery();
hasAdditions = AFTER_ADDITIONS.equals(query);
if (query == null || query.isEmpty()) {
query = AFTER_ADDITIONS;
}
processToolbarChildren(toolBarContributions, configElement, location.getPath(), query, hasAdditions);
}
return;
}
MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution();
menuContribution.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
String idContrib = MenuHelper.getId(configElement);
if (idContrib != null && idContrib.length() > 0) {
menuContribution.setElementId(idContrib);
}
String query = location.getQuery();
if ("org.eclipse.ui.popup.any".equals(location.getPath())) { //$NON-NLS-1$
menuContribution.setParentId("popup"); //$NON-NLS-1$
} else {
menuContribution.setParentId(location.getPath());
hasAdditions = AFTER_ADDITIONS.equals(query);
}
if (query == null || query.isEmpty()) {
query = AFTER_ADDITIONS;
}
menuContribution.setPositionInParent(query);
menuContribution.getTags().add("scheme:" + location.getScheme()); //$NON-NLS-1$
String filter = ContributionsAnalyzer.MC_MENU;
if ("popup".equals(location.getScheme())) { //$NON-NLS-1$
filter = ContributionsAnalyzer.MC_POPUP;
}
menuContribution.getTags().add(filter);
menuContribution.setVisibleWhen(MenuHelper.getVisibleWhen(configElement));
addMenuChildren(menuContribution, configElement, filter);
if (hasAdditions) {
menuContributions.add(0, menuContribution);
} else {
menuContributions.add(menuContribution);
}
processMenuChildren(menuContributions, configElement, filter);
}
/**
* @param menuContributions
* @param filter
*/
private void processMenuChildren(ArrayList<MMenuContribution> menuContributions, IConfigurationElement element,
String filter) {
IConfigurationElement[] menus = element.getChildren(IWorkbenchRegistryConstants.TAG_MENU);
if (menus.length == 0) {
return;
}
for (IConfigurationElement menu : menus) {
MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution();
menuContribution.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
String idContrib = MenuHelper.getId(menu);
if (idContrib != null && idContrib.length() > 0) {
menuContribution.setElementId(idContrib);
}
menuContribution.setParentId(idContrib);
menuContribution.setPositionInParent(AFTER_ADDITIONS);
menuContribution.getTags().add("scheme:" + location.getScheme()); //$NON-NLS-1$
menuContribution.getTags().add(filter);
menuContribution.setVisibleWhen(MenuHelper.getVisibleWhen(menu));
addMenuChildren(menuContribution, menu, filter);
menuContributions.add(menuContribution);
processMenuChildren(menuContributions, menu, filter);
}
}
private void addMenuChildren(final MElementContainer<MMenuElement> container, IConfigurationElement parent,
String filter) {
for (final IConfigurationElement child : parent.getChildren()) {
String itemType = child.getName();
String id = MenuHelper.getId(child);
if (IWorkbenchRegistryConstants.TAG_COMMAND.equals(itemType)) {
MMenuElement element = createMenuCommandAddition(child);
container.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_SEPARATOR.equals(itemType)) {
MMenuElement element = createMenuSeparatorAddition(child);
container.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_MENU.equals(itemType)) {
MMenu element = createMenuAddition(child, filter);
container.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_TOOLBAR.equals(itemType)) {
System.out.println("Toolbar: " + id + " in " + location); //$NON-NLS-1$//$NON-NLS-2$
} else if (IWorkbenchRegistryConstants.TAG_DYNAMIC.equals(itemType)) {
ContextFunction generator = new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
ServiceLocator sl = new ServiceLocator();
sl.setContext(context);
return new DynamicMenuContributionItem(MenuHelper.getId(child), sl,
child);
}
};
MMenuItem menuItem = RenderedElementUtil.createRenderedMenuItem();
menuItem.setElementId(id);
RenderedElementUtil.setContributionManager(menuItem, generator);
menuItem.setVisibleWhen(MenuHelper.getVisibleWhen(child));
container.getChildren().add(menuItem);
}
}
}
/**
* @param iConfigurationElement
* @return
*/
private MMenuElement createMenuCommandAddition(IConfigurationElement commandAddition) {
MHandledMenuItem item = MenuFactoryImpl.eINSTANCE.createHandledMenuItem();
item.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
item.setElementId(MenuHelper.getId(commandAddition));
String commandId = MenuHelper.getCommandId(commandAddition);
MCommand commandById = ContributionsAnalyzer.getCommandById(application, commandId);
if (commandById == null) {
commandById = CommandsFactoryImpl.eINSTANCE.createCommand();
commandById.setElementId(commandId);
commandById.setCommandName(commandId);
application.getCommands().add(commandById);
}
item.setCommand(commandById);
Map parms = MenuHelper.getParameters(commandAddition);
for (Object obj : parms.entrySet()) {
Map.Entry e = (Map.Entry) obj;
MParameter parm = CommandsFactoryImpl.eINSTANCE.createParameter();
parm.setName(e.getKey().toString());
parm.setValue(e.getValue().toString());
item.getParameters().add(parm);
}
String iconUrl = MenuHelper.getIconURI(commandAddition, IWorkbenchRegistryConstants.ATT_ICON);
if (iconUrl == null) {
ICommandImageService commandImageService = application.getContext().get(ICommandImageService.class);
ImageDescriptor descriptor = commandImageService == null ? null
: commandImageService.getImageDescriptor(commandId);
if (descriptor == null) {
descriptor = commandImageService == null ? null
: commandImageService.getImageDescriptor(item.getElementId());
}
if (descriptor != null) {
item.setIconURI(MenuHelper.getImageUrl(descriptor));
}
} else {
item.setIconURI(iconUrl);
}
item.setLabel(MenuHelper.getLabel(commandAddition));
item.setMnemonics(MenuHelper.getMnemonic(commandAddition));
item.setTooltip(MenuHelper.getTooltip(commandAddition));
item.setType(MenuHelper.getStyle(commandAddition));
item.setVisibleWhen(MenuHelper.getVisibleWhen(commandAddition));
String helpContextId = MenuHelper.getHelpContextId(commandAddition);
if (helpContextId != null) {
item.getPersistedState().put(EHelpService.HELP_CONTEXT_ID, helpContextId);
}
createIdentifierTracker(item);
return item;
}
private class IdListener implements IIdentifierListener {
@Override
public void identifierChanged(IdentifierEvent identifierEvent) {
application.getContext().set(identifierEvent.getIdentifier().getId(),
identifierEvent.getIdentifier().isEnabled());
}
}
private IdListener idUpdater = new IdListener();
private void createIdentifierTracker(MApplicationElement item) {
if (item.getElementId() != null && item.getElementId().length() > 0) {
String id = namespaceIdentifier + "/" + item.getElementId(); //$NON-NLS-1$
item.getPersistedState().put(MenuManagerRenderer.VISIBILITY_IDENTIFIER, id);
final IIdentifier identifier = activityManager.getIdentifier(id);
if (identifier != null) {
application.getContext().set(identifier.getId(), identifier.isEnabled());
identifier.addIdentifierListener(idUpdater);
}
}
}
private MMenuElement createMenuSeparatorAddition(final IConfigurationElement sepAddition) {
String name = MenuHelper.getName(sepAddition);
MMenuElement element = MenuFactoryImpl.eINSTANCE.createMenuSeparator();
element.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
element.setElementId(name);
if (!MenuHelper.isSeparatorVisible(sepAddition)) {
element.setVisible(false);
element.getTags().add(MenuManagerRenderer.GROUP_MARKER);
}
return element;
}
private MMenu createMenuAddition(final IConfigurationElement menuAddition, String filter) {
// Is this for a menu or a ToolBar ? We can't create
// a menu directly under a Toolbar; we have to add an
// item of style 'pulldown'
if (inToolbar()) {
return null;
}
MMenu menu = MenuHelper.createMenuAddition(menuAddition);
menu.getTags().add(filter);
// addMenuChildren(menu, menuAddition, filter);
return menu;
}
private boolean isUndefined(String query) {
if (query == null || query.isEmpty()) {
return true;
}
int index = query.indexOf('=');
return index == -1 || query.substring(index + 1).equals("additions"); //$NON-NLS-1$
}
private void processTrimLocation(MTrimContribution contribution) {
String query = location.getQuery();
if (TRIM_COMMAND2.equals(location.getPath())) {
contribution.setParentId(IWorkbenchConstants.MAIN_TOOLBAR_ID);
if (isUndefined(query)) {
query = "endof"; //$NON-NLS-1$
}
contribution.setPositionInParent(query);
} else {
contribution.setParentId(location.getPath());
if (query == null || query.isEmpty()) {
query = AFTER_ADDITIONS;
}
contribution.setPositionInParent(query);
}
}
private void processTrimChildren(ArrayList<MTrimContribution> trimContributions,
ArrayList<MToolBarContribution> toolBarContributions, IConfigurationElement element) {
IConfigurationElement[] toolbars = element.getChildren(IWorkbenchRegistryConstants.TAG_TOOLBAR);
if (toolbars.length == 0) {
return;
}
MTrimContribution trimContribution = MenuFactoryImpl.eINSTANCE.createTrimContribution();
trimContribution.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
String idContrib = MenuHelper.getId(configElement);
if (idContrib != null && idContrib.length() > 0) {
trimContribution.setElementId(idContrib);
}
String query = location.getQuery();
boolean hasAdditions = AFTER_ADDITIONS.equals(query);
processTrimLocation(trimContribution);
trimContribution.getTags().add("scheme:" + location.getScheme()); //$NON-NLS-1$
for (IConfigurationElement toolbar : toolbars) {
MToolBar item = MenuFactoryImpl.eINSTANCE.createToolBar();
item.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
item.setElementId(MenuHelper.getId(toolbar));
item.getTransientData().put("Name", MenuHelper.getLabel(toolbar)); //$NON-NLS-1$
processToolbarChildren(toolBarContributions, toolbar, item.getElementId(), AFTER_ADDITIONS, false);
trimContribution.getChildren().add(item);
}
if (hasAdditions) {
trimContributions.add(0, trimContribution);
} else {
trimContributions.add(trimContribution);
}
}
private void processToolbarChildren(ArrayList<MToolBarContribution> contributions, IConfigurationElement toolbar,
String parentId, String position, boolean hasAdditions) {
MToolBarContribution toolBarContribution = MenuFactoryImpl.eINSTANCE.createToolBarContribution();
toolBarContribution.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
String idContrib = MenuHelper.getId(toolbar);
if (idContrib != null && idContrib.length() > 0) {
toolBarContribution.setElementId(idContrib);
}
toolBarContribution.setParentId(parentId);
toolBarContribution.setPositionInParent(position);
toolBarContribution.getTags().add("scheme:" + location.getScheme()); //$NON-NLS-1$
for (final IConfigurationElement child : toolbar.getChildren()) {
String itemType = child.getName();
if (IWorkbenchRegistryConstants.TAG_COMMAND.equals(itemType)) {
MToolBarElement element = createToolBarCommandAddition(child);
toolBarContribution.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_SEPARATOR.equals(itemType)) {
MToolBarElement element = createToolBarSeparatorAddition(child);
toolBarContribution.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_CONTROL.equals(itemType)) {
MToolBarElement element = createToolControlAddition(child);
toolBarContribution.getChildren().add(element);
} else if (IWorkbenchRegistryConstants.TAG_DYNAMIC.equals(itemType)) {
ContextFunction generator = new ContextFunction() {
@Override
public Object compute(IEclipseContext context, String contextKey) {
ServiceLocator sl = new ServiceLocator();
sl.setContext(context);
return new DynamicToolBarContributionItem(
MenuHelper.getId(child), sl, child);
}
};
MToolBarElement element = createToolDynamicAddition(child);
RenderedElementUtil.setContributionManager(element, generator);
toolBarContribution.getChildren().add(element);
}
}
if (hasAdditions) {
contributions.add(0, toolBarContribution);
} else {
contributions.add(toolBarContribution);
}
}
private MToolBarElement createToolDynamicAddition(IConfigurationElement element) {
String id = MenuHelper.getId(element);
MToolControl control = RenderedElementUtil.createRenderedToolBarElement();
control.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
control.setElementId(id);
control.setContributionURI(CompatibilityWorkbenchWindowControlContribution.CONTROL_CONTRIBUTION_URI);
ControlContributionRegistry.add(id, element);
control.setVisibleWhen(MenuHelper.getVisibleWhen(element));
createIdentifierTracker(control);
return control;
}
private MToolBarElement createToolControlAddition(IConfigurationElement element) {
String id = MenuHelper.getId(element);
MToolControl control = MenuFactoryImpl.eINSTANCE.createToolControl();
control.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
control.setElementId(id);
control.setContributionURI(CompatibilityWorkbenchWindowControlContribution.CONTROL_CONTRIBUTION_URI);
ControlContributionRegistry.add(id, element);
control.setVisibleWhen(MenuHelper.getVisibleWhen(element));
createIdentifierTracker(control);
return control;
}
private MToolBarElement createToolBarSeparatorAddition(final IConfigurationElement sepAddition) {
String name = MenuHelper.getName(sepAddition);
MToolBarElement element = MenuFactoryImpl.eINSTANCE.createToolBarSeparator();
element.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
element.setElementId(name);
if (!MenuHelper.isSeparatorVisible(sepAddition)) {
element.setVisible(false);
element.getTags().add(MenuManagerRenderer.GROUP_MARKER);
}
return element;
}
private MToolBarElement createToolBarCommandAddition(final IConfigurationElement commandAddition) {
MHandledToolItem item = MenuFactoryImpl.eINSTANCE.createHandledToolItem();
item.getPersistedState().put(IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
item.setElementId(MenuHelper.getId(commandAddition));
String commandId = MenuHelper.getCommandId(commandAddition);
MCommand commandById = ContributionsAnalyzer.getCommandById(application, commandId);
if (commandById == null) {
commandById = CommandsFactoryImpl.eINSTANCE.createCommand();
commandById.setElementId(commandId);
commandById.setCommandName(commandId);
application.getCommands().add(commandById);
}
item.setCommand(commandById);
Map parms = MenuHelper.getParameters(commandAddition);
for (Object obj : parms.entrySet()) {
Map.Entry e = (Map.Entry) obj;
MParameter parm = CommandsFactoryImpl.eINSTANCE.createParameter();
parm.setName(e.getKey().toString());
parm.setValue(e.getValue().toString());
item.getParameters().add(parm);
}
String iconUrl = MenuHelper.getIconURI(commandAddition, IWorkbenchRegistryConstants.ATT_ICON);
if (iconUrl == null) {
ICommandImageService commandImageService = application.getContext().get(ICommandImageService.class);
ImageDescriptor descriptor = commandImageService == null ? null
: commandImageService.getImageDescriptor(commandId, ICommandImageService.IMAGE_STYLE_TOOLBAR);
if (descriptor == null) {
descriptor = commandImageService == null ? null
: commandImageService.getImageDescriptor(item.getElementId(),
ICommandImageService.IMAGE_STYLE_TOOLBAR);
if (descriptor == null) {
item.setLabel(MenuHelper.getLabel(commandAddition));
} else {
item.setIconURI(MenuHelper.getImageUrl(descriptor));
}
} else {
item.setIconURI(MenuHelper.getImageUrl(descriptor));
}
} else {
item.setIconURI(iconUrl);
}
iconUrl = MenuHelper.getIconURI(commandAddition, IWorkbenchRegistryConstants.ATT_DISABLEDICON);
if (iconUrl == null) {
ICommandImageService commandImageService = application.getContext().get(ICommandImageService.class);
if (commandImageService != null) {
ImageDescriptor descriptor = commandImageService.getImageDescriptor(commandId,
ICommandImageService.TYPE_DISABLED, ICommandImageService.IMAGE_STYLE_TOOLBAR);
if (descriptor == null) {
descriptor = commandImageService.getImageDescriptor(item.getElementId(),
ICommandImageService.TYPE_DISABLED, ICommandImageService.IMAGE_STYLE_TOOLBAR);
}
if (descriptor != null) {
iconUrl = MenuHelper.getImageUrl(descriptor);
}
}
}
if (iconUrl != null) {
MenuHelper.setDisabledIconURI(item, iconUrl);
}
item.setTooltip(MenuHelper.getTooltip(commandAddition));
item.setType(MenuHelper.getStyle(commandAddition));
if (MenuHelper.hasPulldownStyle(commandAddition)) {
MMenu element = MenuFactoryImpl.eINSTANCE.createMenu();
String id = MenuHelper.getId(commandAddition);
element.setElementId(id);
item.setMenu(element);
}
item.setVisibleWhen(MenuHelper.getVisibleWhen(commandAddition));
if (MenuHelper.getMode(commandAddition) == CommandContributionItem.MODE_FORCE_TEXT) {
item.getTags().add("FORCE_TEXT"); //$NON-NLS-1$
item.setLabel(MenuHelper.getLabel(commandAddition));
}
createIdentifierTracker(item);
return item;
}
@Override
public String toString() {
return "MenuAdditionCacheEntry [id=" + MenuHelper.getId(configElement) //$NON-NLS-1$
+ ", namespaceId=" + namespaceIdentifier + ", location=" + location + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}