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 fc144a98927d..d03aa76019cf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -30,12 +30,10 @@ import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.codeStyle.CodeStyleSettingsManager; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.codeStyle.VariableKind; +import com.intellij.psi.codeStyle.*; import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.impl.light.LightTypeElement; +import com.intellij.psi.impl.source.codeStyle.JavaCodeStyleManagerImpl; import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.search.GlobalSearchScope; @@ -507,7 +505,12 @@ public class GenerateMembersUtil { } private static boolean isBaseNameGenerated(JavaCodeStyleManager csManager, PsiType parameterType, String paramName) { - return Arrays.asList(csManager.suggestVariableName(VariableKind.PARAMETER, null, null, parameterType).names).contains(paramName); + if (Arrays.asList(csManager.suggestVariableName(VariableKind.PARAMETER, null, null, parameterType).names).contains(paramName)) { + return true; + } + final String typeName = JavaCodeStyleManagerImpl.getTypeName(parameterType); + return typeName != null && + NameUtil.getSuggestionsByName(typeName, "", "", false, false, parameterType instanceof PsiArrayType).contains(paramName); } private static PsiType substituteType(final PsiSubstitutor substitutor, final PsiType type, @NotNull PsiTypeParameterListOwner owner) { diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java index 169773773618..ccbbf3547661 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java @@ -323,7 +323,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { } String name = map.nameByType(longTypeName); if (name != null && isIdentifier(name)) { - return new String[]{name}; + return getSuggestionsByName(name, variableKind, type instanceof PsiArrayType, correctKeywords); } } @@ -413,7 +413,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { } @Nullable - private static String getTypeName(@NotNull PsiType type) { + public static String getTypeName(@NotNull PsiType type) { return getTypeName(type, true); } diff --git a/java/java-tests/testData/codeInsight/overrideImplement/afterOverridingLibraryFunctionWithConfiguredParameterPrefix.java b/java/java-tests/testData/codeInsight/overrideImplement/afterOverridingLibraryFunctionWithConfiguredParameterPrefix.java new file mode 100644 index 000000000000..6d7da6bc4efd --- /dev/null +++ b/java/java-tests/testData/codeInsight/overrideImplement/afterOverridingLibraryFunctionWithConfiguredParameterPrefix.java @@ -0,0 +1,9 @@ +interface IntFunction { + int apply(T t); +} + +class A implements IntFunction { + public int apply(String inS) { + return 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/overrideImplement/beforeOverridingLibraryFunctionWithConfiguredParameterPrefix.java b/java/java-tests/testData/codeInsight/overrideImplement/beforeOverridingLibraryFunctionWithConfiguredParameterPrefix.java new file mode 100644 index 000000000000..05fdf1e0995a --- /dev/null +++ b/java/java-tests/testData/codeInsight/overrideImplement/beforeOverridingLibraryFunctionWithConfiguredParameterPrefix.java @@ -0,0 +1,7 @@ +interface IntFunction { + int apply(T t); +} + +class A implements IntFunction { + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplement15Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplement15Test.java index eda785e6569b..84ec461a8ada 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplement15Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/OverrideImplement15Test.java @@ -21,7 +21,6 @@ import com.intellij.codeInsight.generation.OverrideImplementUtil; import com.intellij.codeInsight.generation.PsiMethodMember; import com.intellij.codeInsight.intention.impl.ImplementAbstractMethodHandler; import com.intellij.lang.java.JavaLanguage; -import com.intellij.openapi.actionSystem.impl.SimpleDataContext; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleSettings; @@ -87,6 +86,18 @@ public class OverrideImplement15Test extends LightCodeInsightTestCase { } } + public void testOverridingLibraryFunctionWithConfiguredParameterPrefix() throws Exception { + CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(getProject()).clone(); + try { + codeStyleSettings.PARAMETER_NAME_PREFIX = "in"; + CodeStyleSettingsManager.getInstance(getProject()).setTemporarySettings(codeStyleSettings); + doTest(false); + } + finally { + CodeStyleSettingsManager.getInstance(getProject()).dropTemporarySettings(); + } + } + public void testLongParameterList() { CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(getProject()).clone(); try { @@ -110,7 +121,7 @@ public class OverrideImplement15Test extends LightCodeInsightTestCase { PsiClass psiClass = PsiTreeUtil.getParentOfType(context, PsiClass.class); assert psiClass != null; - final Collection signatures = OverrideImplementUtil.getMethodSignaturesToOverride(psiClass); + final Collection signatures = OverrideImplementExploreUtil.getMethodSignaturesToOverride(psiClass); final Collection strings = ContainerUtil.map(signatures, FunctionUtil.string()); assertTrue(strings.toString(), strings.contains("HierarchicalMethodSignatureImpl: A([PsiType:String])"));