fixed PY-9657 Make function from method: function call is not updated correctly when imported with qualified reference

This commit is contained in:
Ekaterina Tuzova
2013-05-11 14:23:22 +04:00
parent 684066934e
commit 3748482538
@@ -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);
}
}
}
}
}
}
}
}