From 266002ee0e1fa33fc4d94b4afad7e2b139d18326 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 6 Sep 2011 16:18:08 +0200 Subject: [PATCH] in-place refactorings don't suggest names of built-in types (PY-4474) --- ...meSuggestorUtil.java => NameSuggesterUtil.java} | 4 ++-- .../refactoring/introduce/IntroduceHandler.java | 14 +++++++++----- .../dontSuggestBuiltinTypeNames.py | 1 + .../refactoring/PyIntroduceConstantTest.java | 2 +- .../python/refactoring/PyIntroduceTestCase.java | 12 ++++++++---- .../refactoring/PyIntroduceVariableTest.java | 8 ++++++++ 6 files changed, 29 insertions(+), 12 deletions(-) rename python/src/com/jetbrains/python/refactoring/{NameSuggestorUtil.java => NameSuggesterUtil.java} (97%) create mode 100644 python/testData/refactoring/introduceVariable/dontSuggestBuiltinTypeNames.py diff --git a/python/src/com/jetbrains/python/refactoring/NameSuggestorUtil.java b/python/src/com/jetbrains/python/refactoring/NameSuggesterUtil.java similarity index 97% rename from python/src/com/jetbrains/python/refactoring/NameSuggestorUtil.java rename to python/src/com/jetbrains/python/refactoring/NameSuggesterUtil.java index 27b7e52b356d..1b46bfee1639 100644 --- a/python/src/com/jetbrains/python/refactoring/NameSuggestorUtil.java +++ b/python/src/com/jetbrains/python/refactoring/NameSuggesterUtil.java @@ -13,8 +13,8 @@ import java.util.regex.Pattern; /** * @author Alexey.Ivanov */ -public class NameSuggestorUtil { - private NameSuggestorUtil() { +public class NameSuggesterUtil { + private NameSuggesterUtil() { } private static String deleteNonLetterFromString(@NotNull final String string) { diff --git a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java index abaed9aafe70..9cc930cdf6d4 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java @@ -30,7 +30,7 @@ import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.types.PyNoneType; import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; -import com.jetbrains.python.refactoring.NameSuggestorUtil; +import com.jetbrains.python.refactoring.NameSuggesterUtil; import com.jetbrains.python.refactoring.PyRefactoringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -141,13 +141,17 @@ abstract public class IntroduceHandler implements RefactoringActionHandler { } } if (text != null) { - candidates.addAll(NameSuggestorUtil.generateNames(text)); + candidates.addAll(NameSuggesterUtil.generateNames(text)); } - PyType type = expression.getType(TypeEvalContext.slow()); + final TypeEvalContext context = TypeEvalContext.slow(); + PyType type = expression.getType(context); if (type != null && type != PyNoneType.INSTANCE) { - final String typeName = type.getName(); + String typeName = type.getName(); if (typeName != null) { - candidates.addAll(NameSuggestorUtil.generateNamesByType(typeName)); + if (type.isBuiltin(context)) { + typeName = typeName.substring(0, 1); + } + candidates.addAll(NameSuggesterUtil.generateNamesByType(typeName)); } } final PyKeywordArgument kwArg = PsiTreeUtil.getParentOfType(expression, PyKeywordArgument.class); diff --git a/python/testData/refactoring/introduceVariable/dontSuggestBuiltinTypeNames.py b/python/testData/refactoring/introduceVariable/dontSuggestBuiltinTypeNames.py new file mode 100644 index 000000000000..80a56485dd79 --- /dev/null +++ b/python/testData/refactoring/introduceVariable/dontSuggestBuiltinTypeNames.py @@ -0,0 +1 @@ +"foo bar" \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java index a807453484d4..d80e0cc691ad 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java @@ -34,7 +34,7 @@ public class PyIntroduceConstantTest extends PyIntroduceTestCase { } public void testSuggestUniqueNames() { // PY-4409 - doTestSuggestions(PyExpression.class, "STR1"); + doTestSuggestions(PyExpression.class, "S1"); } public void testPy4414() { diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java index 15a908e0eae8..e577a9ebc009 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java @@ -20,14 +20,18 @@ import java.util.Collection; */ public abstract class PyIntroduceTestCase extends PyLightFixtureTestCase { protected void doTestSuggestions(Class parentClass, String... expectedNames) { + final Collection names = buildSuggestions(parentClass); + for (String expectedName : expectedNames) { + assertTrue(StringUtil.join(names, ", "), names.contains(expectedName)); + } + } + + protected Collection buildSuggestions(Class parentClass) { myFixture.configureByFile(getTestName(true) + ".py"); IntroduceHandler handler = createHandler(); PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()), parentClass); - final Collection names = handler.getSuggestedNames(expr); - for (String expectedName : expectedNames) { - assertTrue(StringUtil.join(names, ", "), names.contains(expectedName)); - } + return handler.getSuggestedNames(expr); } protected abstract IntroduceHandler createHandler(); diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java index d73eab1ab2ac..c7e145526351 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -7,6 +7,8 @@ import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.refactoring.introduce.IntroduceHandler; import com.jetbrains.python.refactoring.introduce.variable.PyIntroduceVariableHandler; +import java.util.Collection; + /** * @author yole */ @@ -44,6 +46,12 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase { doTestSuggestions(PyExpression.class, "foo_bar"); } + public void testDontSuggestBuiltinTypeNames() { // PY-4474 + final Collection strings = buildSuggestions(PyExpression.class); + assertTrue(strings.contains("s")); + assertFalse(strings.contains("str")); + } + public void testIncorrectSelection() { // PY-4455 doTestCannotPerform(); }