From a7b4329c36be76d6854626c3ce48631db7c8a11e Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 15 Oct 2012 15:08:46 +0200 Subject: [PATCH] IDEA-92896 Invalid parameters names in implemented methods. --- .../generation/GenerateMembersUtil.java | 36 +++++-------------- .../util/text/UniqueNameGenerator.java | 8 +++-- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index af93fbb864dd..66c1406b2504 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -22,7 +22,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleSettings; @@ -38,10 +37,12 @@ import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.VisibilityUtil; import com.intellij.util.containers.HashMap; +import com.intellij.util.text.UniqueNameGenerator; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -345,7 +346,7 @@ public class GenerateMembersUtil { @NotNull PsiParameterList targetParameterList, @NotNull PsiSubstitutor substitutor) { PsiParameter[] parameters = sourceParameterList.getParameters(); - Map> m = new HashMap>(); + UniqueNameGenerator generator = new UniqueNameGenerator(); for (int i = 0; i < parameters.length; i++) { PsiParameter parameter = parameters[i]; final PsiType parameterType = parameter.getType(); @@ -358,25 +359,14 @@ public class GenerateMembersUtil { } if (paramName == null || isBaseNameGenerated && !isSubstituted && isBaseNameGenerated(codeStyleManager, parameterType, paramName)) { - Pair pair = m.get(substituted); - if (pair != null) { - paramName = pair.first + pair.second; - m.put(substituted, Pair.create(pair.first, pair.second.intValue() + 1)); - } - else { - String[] names = codeStyleManager.suggestVariableName(VariableKind.PARAMETER, null, null, substituted).names; - if (names.length > 0) { - paramName = names[0]; - } - else { - paramName = "p" + i; - } - - m.put(substituted, new Pair(paramName, 1)); + String[] names = codeStyleManager.suggestVariableName(VariableKind.PARAMETER, null, null, substituted).names; + if (names.length > 0) { + paramName = generator.generateUniqueName(names[0]); } } if (paramName == null) paramName = "p" + i; + generator.addExistingName(paramName); final PsiParameter newParameter = factory.createParameter(paramName, substituted); copyOrReplaceModifierList(parameter, newParameter); targetParameterList.add(newParameter); @@ -431,16 +421,8 @@ public class GenerateMembersUtil { return JVMElementFactories.getFactory(target.getLanguage(), method.getProject()); } - private static boolean isBaseNameGenerated(JavaCodeStyleManager codeStyleManager, PsiType parameterType, String paramName) { - final String[] baseSuggestions = codeStyleManager.suggestVariableName(VariableKind.PARAMETER, null, null, parameterType).names; - boolean isBaseNameGenerated = false; - for (String s : baseSuggestions) { - if (s.equals(paramName)) { - isBaseNameGenerated = true; - break; - } - } - return isBaseNameGenerated; + private static boolean isBaseNameGenerated(JavaCodeStyleManager csManager, PsiType parameterType, String paramName) { + return Arrays.asList(csManager.suggestVariableName(VariableKind.PARAMETER, null, null, parameterType).names).contains(paramName); } private static PsiType substituteType(final PsiSubstitutor substitutor, final PsiType type) { diff --git a/platform/util/src/com/intellij/util/text/UniqueNameGenerator.java b/platform/util/src/com/intellij/util/text/UniqueNameGenerator.java index 6c379d85beec..1bfa43ef32bd 100644 --- a/platform/util/src/com/intellij/util/text/UniqueNameGenerator.java +++ b/platform/util/src/com/intellij/util/text/UniqueNameGenerator.java @@ -31,7 +31,7 @@ public class UniqueNameGenerator implements Condition { public UniqueNameGenerator(final Collection elements, @Nullable Function namer) { for (final Object t : elements) { - myExistingNames.add(namer != null ? namer.fun(t) : t.toString()); + addExistingName(namer != null ? namer.fun(t) : t.toString()); } } @@ -87,10 +87,14 @@ public class UniqueNameGenerator implements Condition { public String generateUniqueName(final String defaultName, final String prefix, final String suffix, final String beforeNumber, final String afterNumber) { final String result = generateUniqueName(defaultName, prefix, suffix, beforeNumber, afterNumber, this); - myExistingNames.add(result); + addExistingName(result); return result; } + public void addExistingName(String result) { + myExistingNames.add(result); + } + public String generateUniqueName(final String defaultName) { return generateUniqueName(defaultName, "", ""); }