detect generated parameter name ignoring prefixes (e.g. in case of overriding library) (IDEA-144961)

This commit is contained in:
Anna Kozlova
2015-09-10 15:55:08 +03:00
parent a811f9668e
commit 837f0c8324
5 changed files with 39 additions and 9 deletions
@@ -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) {
@@ -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);
}
@@ -0,0 +1,9 @@
interface IntFunction<T> {
int apply(T t);
}
class A implements IntFunction<String> {
public int apply(String inS) {
return 0;
}
}
@@ -0,0 +1,7 @@
interface IntFunction<T> {
int apply(T t);
}
class A implements IntFunction<String> {
<caret>
}
@@ -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<MethodSignature> signatures = OverrideImplementUtil.getMethodSignaturesToOverride(psiClass);
final Collection<MethodSignature> signatures = OverrideImplementExploreUtil.getMethodSignaturesToOverride(psiClass);
final Collection<String> strings = ContainerUtil.map(signatures, FunctionUtil.string());
assertTrue(strings.toString(), strings.contains("HierarchicalMethodSignatureImpl: A([PsiType:String])"));