From e3fc0ee66ac0e1b3cff41e6cf7cf90b5c16318f5 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 26 Nov 2014 21:31:38 +0300 Subject: [PATCH] PY-13114 Inlining of method call does not add extra parenthesis Fix prioritization problem: reference expressions should have the same priority as indexing, slicing and function calls. --- .../python/refactoring/PyReplaceExpressionUtil.java | 5 ++++- .../inlinelocal/methodCallInlinedAsQualifier.after.py | 1 + .../inlinelocal/methodCallInlinedAsQualifier.before.py | 2 ++ .../com/jetbrains/python/refactoring/PyInlineLocalTest.java | 5 +++++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.after.py create mode 100644 python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.before.py diff --git a/python/src/com/jetbrains/python/refactoring/PyReplaceExpressionUtil.java b/python/src/com/jetbrains/python/refactoring/PyReplaceExpressionUtil.java index 90689fc405f9..9b4c95f7d2b2 100644 --- a/python/src/com/jetbrains/python/refactoring/PyReplaceExpressionUtil.java +++ b/python/src/com/jetbrains/python/refactoring/PyReplaceExpressionUtil.java @@ -441,7 +441,10 @@ public class PyReplaceExpressionUtil implements PyElementTypes { private static int getExpressionPriority(PyElement expr) { int priority = 0; - if (expr instanceof PySubscriptionExpression || expr instanceof PySliceExpression || expr instanceof PyCallExpression) priority = 1; + if (expr instanceof PyReferenceExpression || + expr instanceof PySubscriptionExpression || + expr instanceof PySliceExpression || + expr instanceof PyCallExpression) priority = 1; else if (expr instanceof PyPrefixExpression) { final IElementType opType = getOperationType(expr); if (opType == PLUS || opType == MINUS || opType == TILDE) priority = 2; diff --git a/python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.after.py b/python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.after.py new file mode 100644 index 000000000000..1a3f524e748a --- /dev/null +++ b/python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.after.py @@ -0,0 +1 @@ +a.method().strip() \ No newline at end of file diff --git a/python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.before.py b/python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.before.py new file mode 100644 index 000000000000..4bf5d50d679c --- /dev/null +++ b/python/testData/refactoring/inlinelocal/methodCallInlinedAsQualifier.before.py @@ -0,0 +1,2 @@ +res = a.method() +res.strip() \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyInlineLocalTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyInlineLocalTest.java index a8b29f98daba..993c0fd794b2 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyInlineLocalTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyInlineLocalTest.java @@ -104,6 +104,11 @@ public class PyInlineLocalTest extends PyTestCase { doTest(); } + // PY-13114 + public void testMethodCallInlinedAsQualifier() { + doTest(); + } + // PY-12409 public void testResultExceedsRightMargin() { final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(myFixture.getProject());