update usages after converting method to function

This commit is contained in:
Ekaterina Tuzova
2013-04-24 19:29:34 +04:00
parent b6c5477efe
commit bf71eaac4c
5 changed files with 42 additions and 0 deletions

View File

@@ -6,11 +6,15 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.usageView.UsageInfo;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.refactoring.PyRefactoringUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* User: ktisha
*/
@@ -36,6 +40,7 @@ public class PyMakeFunctionFromMethodQuickFix implements LocalQuickFix {
final PyClass containingClass = problemFunction.getContainingClass();
if (containingClass == null) return;
final List<UsageInfo> usages = PyRefactoringUtil.findUsages(problemFunction, false);
PyUtil.deleteParameter(problemFunction, 0);
final PsiElement copy = problemFunction.copy();
@@ -46,5 +51,12 @@ public class PyMakeFunctionFromMethodQuickFix implements LocalQuickFix {
}
final PsiFile file = containingClass.getContainingFile();
file.addAfter(copy, containingClass);
for (UsageInfo usage : usages) {
final PsiElement usageElement = usage.getElement();
if (usageElement instanceof PyReferenceExpression) {
PyUtil.removeQualifier((PyReferenceExpression)usageElement);
}
}
}
}

View File

@@ -656,6 +656,15 @@ public class PyUtil {
return true;
}
public static void removeQualifier(PyReferenceExpression element) {
final PyExpression qualifier = element.getQualifier();
if (qualifier != null) {
final PsiElement dot = qualifier.getNextSibling();
if (dot != null) dot.delete();
qualifier.delete();
}
}
public static class KnownDecoratorProviderHolder {
public static PyKnownDecoratorProvider[] KNOWN_DECORATOR_PROVIDERS = Extensions.getExtensions(PyKnownDecoratorProvider.EP_NAME);

View File

@@ -0,0 +1,7 @@
__author__ = 'ktisha'
class A:
def fo<caret>o(self):
print("Hello Pycharm!")
A().foo()

View File

@@ -0,0 +1,10 @@
__author__ = 'ktisha'
class A: pass
def foo():
print("Hello Pycharm!")
foo()

View File

@@ -32,4 +32,8 @@ public class PyMakeFunctionFromMethodQuickFixTest extends PyQuickFixTestCase {
doInspectionTest(PyMethodMayBeStaticInspection.class, PyBundle.message("QFIX.NAME.make.function"));
}
public void testUpdateUsage() {
doInspectionTest(PyMethodMayBeStaticInspection.class, PyBundle.message("QFIX.NAME.make.function"));
}
}