diff --git a/src/org/eclipse/core/commands/ParameterizedCommand.java b/src/org/eclipse/core/commands/ParameterizedCommand.java index fdcc471..4502e40 100644 --- a/src/org/eclipse/core/commands/ParameterizedCommand.java +++ b/src/org/eclipse/core/commands/ParameterizedCommand.java @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Benjamin Muskalla - bug 222861 [Commands] ParameterizedCommand#equals broken + * Mykola Nikishov - bug 293447 Parameter as a part of command's name in the Quick Access *******************************************************************************/ package org.eclipse.core.commands; @@ -17,8 +18,12 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.core.internal.commands.util.Util; @@ -529,6 +534,8 @@ public final class ParameterizedCommand implements Comparable { return command.getId(); } + private static final String PARAM_REGEX = "\\{(\\d+)\\}"; + /** * Returns a human-readable representation of this command with all of its * parameterizations. @@ -540,12 +547,40 @@ public final class ParameterizedCommand implements Comparable { */ public final String getName() throws NotDefinedException { if (name == null) { - final StringBuffer nameBuffer = new StringBuffer(); + StringBuffer nameBuffer = new StringBuffer(); nameBuffer.append(command.getName()); if (parameterizations != null) { + Set paramsToSkip = new LinkedHashSet(); + Pattern pattern = Pattern.compile(PARAM_REGEX); + String commandName = command.getName(); + Matcher matcher = pattern.matcher(commandName); + while (matcher.find()) { + matcher.group(); + final String paramNumber = commandName.substring(matcher + .start() + 1, matcher.end() - 1); + final int paramIndex = Integer.parseInt(paramNumber); + paramsToSkip.add(new Integer(paramIndex)); + String valueInArray; + try { + valueInArray = parameterizations[paramIndex] + .getValueName(); + commandName = matcher.replaceFirst(valueInArray); + } catch (ParameterValuesException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + matcher = pattern.matcher(commandName); + } + nameBuffer = new StringBuffer(); + nameBuffer.append(commandName); + nameBuffer.append(" ("); //$NON-NLS-1$ final int parameterizationCount = parameterizations.length; for (int i = 0; i < parameterizationCount; i++) { + if (paramsToSkip.contains(new Integer(i))) { + // this parameter was added to command's name already, skip it + continue; + } final Parameterization parameterization = parameterizations[i]; nameBuffer .append(parameterization.getParameter().getName());