From 1a92e7e12f365d750bf2e92d9626c5a04fdf02d3 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Mon, 26 Oct 2015 14:47:03 +0300 Subject: [PATCH] PY-17360 Allow to extract qualifier of a call expression --- .../python/refactoring/introduce/IntroduceHandler.java | 5 +++-- .../introduceVariable/callExpressionQualifier.after.py | 7 +++++++ .../introduceVariable/callExpressionQualifier.py | 6 ++++++ .../python/refactoring/PyIntroduceVariableTest.java | 5 +++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 python/testData/refactoring/introduceVariable/callExpressionQualifier.after.py create mode 100644 python/testData/refactoring/introduceVariable/callExpressionQualifier.py diff --git a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java index 1d165c30faf2..d1d9bdf13492 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/IntroduceHandler.java @@ -60,6 +60,7 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import static com.jetbrains.python.inspections.PyStringFormatParser.*; +import static com.jetbrains.python.psi.PyUtil.as; /** * @author Alexey.Ivanov @@ -417,8 +418,8 @@ abstract public class IntroduceHandler implements RefactoringActionHandler { } private static boolean isValidIntroduceVariant(PsiElement element) { - final PyCallExpression call = PsiTreeUtil.getParentOfType(element, PyCallExpression.class); - if (call != null && PsiTreeUtil.isAncestor(call.getCallee(), element, false)) { + final PyCallExpression call = as(element.getParent(), PyCallExpression.class); + if (call != null && call.getCallee() == element) { return false; } final PyComprehensionElement comprehension = PsiTreeUtil.getParentOfType(element, PyComprehensionElement.class, true); diff --git a/python/testData/refactoring/introduceVariable/callExpressionQualifier.after.py b/python/testData/refactoring/introduceVariable/callExpressionQualifier.after.py new file mode 100644 index 000000000000..b119a19c1e2e --- /dev/null +++ b/python/testData/refactoring/introduceVariable/callExpressionQualifier.after.py @@ -0,0 +1,7 @@ +class MyClass: + def method(self): + return 42 + + +a = MyClass() +x = a.method() \ No newline at end of file diff --git a/python/testData/refactoring/introduceVariable/callExpressionQualifier.py b/python/testData/refactoring/introduceVariable/callExpressionQualifier.py new file mode 100644 index 000000000000..6ad140fa0713 --- /dev/null +++ b/python/testData/refactoring/introduceVariable/callExpressionQualifier.py @@ -0,0 +1,6 @@ +class MyClass: + def method(self): + return 42 + + +x = MyClass().method() \ 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 0b16601c3eab..6cd1ac009b99 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -309,6 +309,11 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase { doTest(); } + // PY-17360 + public void testCallExpressionQualifier() { + doTest(); + } + @Override protected String getTestDataPath() { return super.getTestDataPath() + "/refactoring/introduceVariable";