From 3748482538264e33b59f6b5dd2325048244b9df7 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Sat, 11 May 2013 14:23:22 +0400 Subject: [PATCH] fixed PY-9657 Make function from method: function call is not updated correctly when imported with qualified reference --- .../src/com/jetbrains/python/psi/PyUtil.java | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index e96870c1a0d1..971fe5b3a4c7 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -656,12 +656,42 @@ public class PyUtil { return true; } - public static void removeQualifier(PyReferenceExpression element) { + public static void removeQualifier(@NotNull final PyReferenceExpression element) { final PyExpression qualifier = element.getQualifier(); - if (qualifier != null) { - final PsiElement dot = qualifier.getNextSibling(); - if (dot != null) dot.delete(); - qualifier.delete(); + if (qualifier == null) return; + + if (qualifier instanceof PyCallExpression) { + final StringBuilder newElement = new StringBuilder(element.getLastChild().getText()); + final PyExpression callee = ((PyCallExpression)qualifier).getCallee(); + if (callee instanceof PyReferenceExpression) { + final PyExpression calleeQualifier = ((PyReferenceExpression)callee).getQualifier(); + if (calleeQualifier != null) + newElement.insert(0, calleeQualifier.getText() + "."); + } + final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(element.getProject()); + final PyExpression expression = elementGenerator.createExpressionFromText(LanguageLevel.forElement(element), newElement.toString()); + element.replace(expression); + } + else { + final PsiReference reference = qualifier.getReference(); + if (reference != null) { + final PsiElement resolved = reference.resolve(); + if (resolved instanceof PyTargetExpression) { + final PsiElement parent = resolved.getParent(); + if (parent instanceof PyAssignmentStatement) { + final PyExpression value = ((PyAssignmentStatement)parent).getAssignedValue(); + if (value instanceof PyCallExpression) { + final PyExpression callee = ((PyCallExpression)value).getCallee(); + if (callee instanceof PyReferenceExpression) { + final PyExpression calleeQualifier = ((PyReferenceExpression)callee).getQualifier(); + if (calleeQualifier != null) { + value.replace(calleeQualifier); + } + } + } + } + } + } } }