From 800dc9e4222926165b57939e0155bc7daf2fb54f Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 25 Nov 2014 16:07:59 +0300 Subject: [PATCH] PY-13264 Consider qualifier of reference expression when collecting names used in function --- .../com/jetbrains/python/refactoring/PyRefactoringUtil.java | 1 + .../introduceVariable/dontSuggestNameOfCalledFunction.py | 5 +++++ .../jetbrains/python/refactoring/PyIntroduceTestCase.java | 6 +++--- .../python/refactoring/PyIntroduceVariableTest.java | 6 ++++++ 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 python/testData/refactoring/introduceVariable/dontSuggestNameOfCalledFunction.py diff --git a/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java b/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java index e52f5b920b02..51f766d5eee1 100644 --- a/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java +++ b/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java @@ -158,6 +158,7 @@ public class PyRefactoringUtil { @Override public void visitPyReferenceExpression(PyReferenceExpression node) { variables.add(node.getReferencedName()); + super.visitPyReferenceExpression(node); } @Override diff --git a/python/testData/refactoring/introduceVariable/dontSuggestNameOfCalledFunction.py b/python/testData/refactoring/introduceVariable/dontSuggestNameOfCalledFunction.py new file mode 100644 index 000000000000..0bbd5812a0e5 --- /dev/null +++ b/python/testData/refactoring/introduceVariable/dontSuggestNameOfCalledFunction.py @@ -0,0 +1,5 @@ +def select(): + return 'spam' + +def func(): + return select().upper() \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java index 82efe379fc06..948debfda3e4 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceTestCase.java @@ -42,9 +42,9 @@ public abstract class PyIntroduceTestCase extends PyTestCase { 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 IntroduceHandler handler = createHandler(); + final PyExpression expr = PsiTreeUtil.getParentOfType(myFixture.getFile().findElementAt(myFixture.getCaretOffset()), parentClass); + assertNotNull(expr); return handler.getSuggestedNames(expr); } diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java index 5a5cd3b89ff6..d7ae6c429403 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -78,6 +78,12 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase { assertFalse(strings.contains("dict")); } + // PY-13264 + public void testDontSuggestNameOfCalledFunction() { + final Collection suggestions = buildSuggestions(PyCallExpression.class); + assertDoesntContain(suggestions, "select"); + } + public void testSuggestNamesNotInScope() { // PY-4605 final Collection strings = buildSuggestions(PyExpression.class); assertTrue(strings.contains("myfunc1"));