diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionBuilder.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionBuilder.java index bee9be967c88..d33d1aa46383 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionBuilder.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/PyFunctionBuilder.java @@ -69,6 +69,9 @@ public class PyFunctionBuilder { } } } + if (source.isAsync()) { + functionBuilder.makeAsync(); + } functionBuilder.myDocStringGenerator = PyDocstringGenerator.forDocStringOwner(source); return functionBuilder; } diff --git a/python/testData/refactoring/pullup/abstractAsyncMethod/Class.after.py b/python/testData/refactoring/pullup/abstractAsyncMethod/Class.after.py new file mode 100644 index 000000000000..ffe987beed1b --- /dev/null +++ b/python/testData/refactoring/pullup/abstractAsyncMethod/Class.after.py @@ -0,0 +1,6 @@ +from SuperClass import Parent + +class Child(Parent): + async def async_method(self): + """An async method that should be pulled up""" + return "result" \ No newline at end of file diff --git a/python/testData/refactoring/pullup/abstractAsyncMethod/Class.py b/python/testData/refactoring/pullup/abstractAsyncMethod/Class.py new file mode 100644 index 000000000000..ffe987beed1b --- /dev/null +++ b/python/testData/refactoring/pullup/abstractAsyncMethod/Class.py @@ -0,0 +1,6 @@ +from SuperClass import Parent + +class Child(Parent): + async def async_method(self): + """An async method that should be pulled up""" + return "result" \ No newline at end of file diff --git a/python/testData/refactoring/pullup/abstractAsyncMethod/SuperClass.after.py b/python/testData/refactoring/pullup/abstractAsyncMethod/SuperClass.after.py new file mode 100644 index 000000000000..1ac0ce5e3844 --- /dev/null +++ b/python/testData/refactoring/pullup/abstractAsyncMethod/SuperClass.after.py @@ -0,0 +1,8 @@ +from abc import ABCMeta, abstractmethod + + +class Parent(metaclass=ABCMeta): + @abstractmethod + async def async_method(self): + """An async method that should be pulled up""" + pass \ No newline at end of file diff --git a/python/testData/refactoring/pullup/abstractAsyncMethod/SuperClass.py b/python/testData/refactoring/pullup/abstractAsyncMethod/SuperClass.py new file mode 100644 index 000000000000..9a2fb14d0f69 --- /dev/null +++ b/python/testData/refactoring/pullup/abstractAsyncMethod/SuperClass.py @@ -0,0 +1,2 @@ +class Parent: + pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpTest.java b/python/testSrc/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpTest.java index 039d149441fd..34493f60469a 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/classes/pullUp/PyPullUpTest.java @@ -143,6 +143,13 @@ public class PyPullUpTest extends PyClassRefactoringTest { checkAbstract(".my_method", ".my_class_method"); } + /** + * Ensures that pulling async method up as abstract preserves the async keyword + */ + public void testAbstractAsyncMethod() { + checkAbstract(".async_method"); + } + /** * Moves methods fromn Child to Parent and make them abstract * @param methodNames methods to check