From 26c733b37a511e71ac1ee6cb0d67e2ed94865dc1 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 23 May 2012 21:44:51 +0400 Subject: [PATCH] ignore type substitution on override (IDEABKL-6365) --- .../generation/GenerateMembersUtil.java | 27 ++++++++++++------- .../overrideImplement/afterTypeParam.java | 9 +++++++ .../overrideImplement/beforeTypeParam.java | 7 +++++ .../codeInsight/OverrideImplementTest.java | 1 + 4 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java create mode 100644 java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java 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 337db3857199..7d372661b0e5 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -270,16 +270,13 @@ public class GenerateMembersUtil { final PsiType parameterType = parameter.getType(); PsiType substituted = substituteType(substitutor, parameterType); @NonNls String paramName = parameter.getName(); - 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; - } + boolean isBaseNameGenerated = true; + final boolean isSubstituted = substituted.equals(parameterType); + if (!isSubstituted && isBaseNameGenerated(codeStyleManager, TypeConversionUtil.erasure(parameterType), paramName)) { + isBaseNameGenerated = false; } - - if (paramName == null || isBaseNameGenerated && !substituted.equals(parameterType)) { + + if (paramName == null || isBaseNameGenerated && !isSubstituted && isBaseNameGenerated(codeStyleManager, parameterType, paramName)) { Pair pair = m.get(substituted); if (pair != null) { paramName = pair.first + pair.second; @@ -339,6 +336,18 @@ public class GenerateMembersUtil { } } + 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 void processAnnotations(Project project, PsiModifierList modifierList, GlobalSearchScope moduleScope) { final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); final Set toRemove = new HashSet(); diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java b/java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java new file mode 100644 index 000000000000..bcc6df490039 --- /dev/null +++ b/java/java-tests/testData/codeInsight/overrideImplement/afterTypeParam.java @@ -0,0 +1,9 @@ +interface Function { + void fun(Function function); +} + +class Bar extends Function{ + public void fun(Function function) { + //To change body of implemented methods use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java new file mode 100644 index 000000000000..02f91f6855b8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeTypeParam.java @@ -0,0 +1,7 @@ +interface Function { + void fun(Function function); +} + +class Bar extends Function{ + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java index 6b0408dbbee7..6f08e55d2c11 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplementTest.java @@ -35,6 +35,7 @@ public class OverrideImplementTest extends LightCodeInsightTestCase { public void testSubstitutionInTypeParametersList() throws Exception { doTest(false); } public void testTestMissed() throws Exception { doTest(false); } public void testWildcard() throws Exception { doTest(false); } + public void testTypeParam() throws Exception { doTest(false); } public void testLongFinalParameterList() throws Exception { CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(getProject()).clone();