From 9bc89de63faf5b7f398c7c6e677e5eea00740240 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Wed, 24 Apr 2013 19:37:22 +0400 Subject: [PATCH] update usages after converting static method to function --- ...ConvertStaticMethodToFunctionIntention.java | 13 ++++++++++++- .../afterConvertStaticMethodToFunctionUsage.py | 18 ++++++++++++++++++ ...beforeConvertStaticMethodToFunctionUsage.py | 17 +++++++++++++++++ .../com/jetbrains/python/PyIntentionTest.java | 4 ++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 python/testData/intentions/afterConvertStaticMethodToFunctionUsage.py create mode 100644 python/testData/intentions/beforeConvertStaticMethodToFunctionUsage.py diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertStaticMethodToFunctionIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertStaticMethodToFunctionIntention.java index 62e18ee8b55f..42d0cd38f7ec 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertStaticMethodToFunctionIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyConvertStaticMethodToFunctionIntention.java @@ -6,12 +6,16 @@ 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.intellij.util.IncorrectOperationException; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.*; +import com.jetbrains.python.refactoring.PyRefactoringUtil; import org.jetbrains.annotations.NotNull; +import java.util.List; + /** * User: ktisha */ @@ -49,7 +53,7 @@ public class PyConvertStaticMethodToFunctionIntention extends BaseIntentionActio if (problemFunction == null) return; final PyClass containingClass = problemFunction.getContainingClass(); if (containingClass == null) return; - + final List usages = PyRefactoringUtil.findUsages(problemFunction, false); final PyDecoratorList decoratorList = problemFunction.getDecoratorList(); if (decoratorList != null) { final PyDecorator decorator = decoratorList.findDecorator(PyNames.STATICMETHOD); @@ -64,5 +68,12 @@ public class PyConvertStaticMethodToFunctionIntention extends BaseIntentionActio classStatementList.add(generator.createPassStatement()); } file.addAfter(copy, containingClass); + + for (UsageInfo usage : usages) { + final PsiElement usageElement = usage.getElement(); + if (usageElement instanceof PyReferenceExpression) { + PyUtil.removeQualifier((PyReferenceExpression)usageElement); + } + } } } diff --git a/python/testData/intentions/afterConvertStaticMethodToFunctionUsage.py b/python/testData/intentions/afterConvertStaticMethodToFunctionUsage.py new file mode 100644 index 000000000000..6b79b2b27d6a --- /dev/null +++ b/python/testData/intentions/afterConvertStaticMethodToFunctionUsage.py @@ -0,0 +1,18 @@ +class MyClass(object): + """ + My class to show intention. + """ + + def __init__(self): + self.a = 1 + + +def my_static_method(): + import code + import time + + time.sleep(100) + print code + + +my_static_method() \ No newline at end of file diff --git a/python/testData/intentions/beforeConvertStaticMethodToFunctionUsage.py b/python/testData/intentions/beforeConvertStaticMethodToFunctionUsage.py new file mode 100644 index 000000000000..65b02027cda4 --- /dev/null +++ b/python/testData/intentions/beforeConvertStaticMethodToFunctionUsage.py @@ -0,0 +1,17 @@ +class MyClass(object): + """ + My class to show intention. + """ + + def __init__(self): + self.a = 1 + + @staticmethod + def my_static_method(): + import code + import time + + time.sleep(100) + print code + +MyClass().my_static_method() \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyIntentionTest.java b/python/testSrc/com/jetbrains/python/PyIntentionTest.java index 6d3bbe3ca000..803ef669fe64 100644 --- a/python/testSrc/com/jetbrains/python/PyIntentionTest.java +++ b/python/testSrc/com/jetbrains/python/PyIntentionTest.java @@ -402,6 +402,10 @@ public class PyIntentionTest extends PyTestCase { doTest(PyBundle.message("INTN.convert.static.method.to.function")); } + public void testConvertStaticMethodToFunctionUsage() { + doTest(PyBundle.message("INTN.convert.static.method.to.function")); + } + private void doDocStubTest(LanguageLevel languageLevel) { PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), languageLevel); try {