allow evaluating method return type while calculating Introduce Variable name suggestions (PY-1336)

This commit is contained in:
Dmitry Jemerov
2010-07-21 20:06:29 +04:00
parent d2e07e7802
commit 8296ae1f1c
3 changed files with 22 additions and 8 deletions
@@ -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) {
@@ -0,0 +1,7 @@
class MyClass:
pass
def factory():
return MyClass()
<caret>factory()
@@ -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<String> 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<? extends PyExpression> 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<String> names = handler.getSuggestedNames(expr);
assertTrue(names.contains("extra_context"));
for (String expectedName : expectedNames) {
assertTrue(names.contains(expectedName));
}
}
private void doTest() {