From 8296ae1f1c54324c907d3dbb252d719f20dcb668 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 21 Jul 2010 16:32:21 +0400 Subject: [PATCH] allow evaluating method return type while calculating Introduce Variable name suggestions (PY-1336) --- .../introduce/IntroduceHandler.java | 2 +- .../introduceVariable/suggestTypeName.py | 7 +++++++ .../refactoring/PyIntroduceVariableTest.java | 21 ++++++++++++------- 3 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 python/testData/refactoring/introduceVariable/suggestTypeName.py diff --git a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java index a3d6033c6878..680f040dddc2 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java @@ -73,7 +73,7 @@ abstract public class IntroduceHandler implements RefactoringActionHandler { if (text != null) { candidates.addAll(NameSuggestorUtil.generateNames(text)); } - PyType type = expression.getType(TypeEvalContext.fast()); + PyType type = expression.getType(TypeEvalContext.slow()); if (type != null) { final String typeName = type.getName(); if (typeName != null) { diff --git a/python/testData/refactoring/introduceVariable/suggestTypeName.py b/python/testData/refactoring/introduceVariable/suggestTypeName.py new file mode 100644 index 000000000000..6e12587f5976 --- /dev/null +++ b/python/testData/refactoring/introduceVariable/suggestTypeName.py @@ -0,0 +1,7 @@ +class MyClass: + pass + +def factory(): + return MyClass() + +factory() \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java index 82605832fb1c..5b58fb79b742 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -2,6 +2,7 @@ package com.jetbrains.python.refactoring; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.fixtures.PyLightFixtureTestCase; +import com.jetbrains.python.psi.PyCallExpression; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.refactoring.introduce.variable.VariableIntroduceHandler; @@ -25,19 +26,25 @@ public class PyIntroduceVariableTest extends PyLightFixtureTestCase { } public void testSuggestKeywordArgumentName() { // PY-1260 - myFixture.configureByFile(getTestName(true) + ".py"); - VariableIntroduceHandler handler = new VariableIntroduceHandler(); - PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()), PyExpression.class); - final Collection names = handler.getSuggestedNames(expr); - assertTrue(names.contains("extra_context")); + doTestSuggestions(PyExpression.class, "extra_context"); } public void testSuggestArgumentName() { // PY-1260 + doTestSuggestions(PyExpression.class, "extra_context"); + } + + public void testSuggestTypeName() { // PY-1336 + doTestSuggestions(PyCallExpression.class, "my_class"); + } + + private void doTestSuggestions(Class parentClass, String... expectedNames) { myFixture.configureByFile(getTestName(true) + ".py"); VariableIntroduceHandler handler = new VariableIntroduceHandler(); - PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()), PyExpression.class); + PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()), parentClass); final Collection names = handler.getSuggestedNames(expr); - assertTrue(names.contains("extra_context")); + for (String expectedName : expectedNames) { + assertTrue(names.contains(expectedName)); + } } private void doTest() {