better names for copied run configurations (IDEA-23836)

This commit is contained in:
Dirk Dittert
2010-07-12 16:17:09 +04:00
committed by Dmitry Jemerov
parent cd9e11ea5c
commit 18875e5dc0
@@ -64,6 +64,8 @@ import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.net.URL;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RunConfigurable extends BaseConfigurable {
private static final Icon ICON = IconLoader.getIcon("/general/configurableRunDebug.png");
@@ -646,8 +648,8 @@ class RunConfigurable extends BaseConfigurable {
}
}
private static String createUniqueName(DefaultMutableTreeNode typeNode) {
String str = ExecutionBundle.message("run.configuration.unnamed.name.prefix");
private static String createUniqueName(DefaultMutableTreeNode typeNode, @Nullable String baseName) {
String str = (baseName == null) ? ExecutionBundle.message("run.configuration.unnamed.name.prefix") : baseName;
final ArrayList<String> currentNames = new ArrayList<String>();
for (int i = 0; i < typeNode.getChildCount(); i++) {
final Object userObject = ((DefaultMutableTreeNode)typeNode.getChildAt(i)).getUserObject();
@@ -659,9 +661,13 @@ class RunConfigurable extends BaseConfigurable {
}
}
if (!currentNames.contains(str)) return str;
final Matcher matcher = Pattern.compile("(.*?)\\s*\\(\\d+\\)").matcher(str);
final String originalName = (matcher.matches()) ? matcher.group(1) : str;
int i = 1;
while (true) {
if (!currentNames.contains(str + i)) return str + i;
final String newName = String.format("%s (%d)", originalName, i);
if (!currentNames.contains(newName)) return newName;
i++;
}
}
@@ -692,7 +698,7 @@ class RunConfigurable extends BaseConfigurable {
sortTree(myRoot);
((DefaultTreeModel)myTree.getModel()).reload();
}
final RunnerAndConfigurationSettings settings = getRunManager().createConfiguration(createUniqueName(node), factory);
final RunnerAndConfigurationSettings settings = getRunManager().createConfiguration(createUniqueName(node, null), factory);
if (factory instanceof ConfigurationFactoryEx) {
((ConfigurationFactoryEx)factory).onNewConfigurationCreated(settings.getConfiguration());
}
@@ -901,7 +907,7 @@ class RunConfigurable extends BaseConfigurable {
try {
final DefaultMutableTreeNode typeNode = getSelectedConfigurationTypeNode();
final RunnerAndConfigurationSettings settings = configuration.getSnapshot();
final String copyName = createUniqueName(typeNode);
final String copyName = createUniqueName(typeNode, configuration.getNameText());
settings.setName(copyName);
final ConfigurationFactory factory = settings.getFactory();
if (factory instanceof ConfigurationFactoryEx) {