diff --git a/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java b/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java index 78a368005423..9e25eb78efc8 100644 --- a/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java +++ b/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java @@ -311,7 +311,8 @@ public final class PyClassRefactoringUtil { } final QualifiedName containingQName; final String importedName; - if (element instanceof PyFile || element instanceof PsiDirectory) { + final boolean importingModuleOrPackage = element instanceof PyFile || element instanceof PsiDirectory; + if (importingModuleOrPackage) { containingQName = qname.removeLastComponent(); importedName = qname.getLastComponent(); } @@ -320,7 +321,7 @@ public final class PyClassRefactoringUtil { importedName = getOriginalName(element); } final AddImportHelper.ImportPriority priority = AddImportHelper.getImportPriority(anchor, elementSource); - if (preferFromImport && !containingQName.getComponents().isEmpty()) { + if (preferFromImport && !containingQName.getComponents().isEmpty() || !importingModuleOrPackage) { return AddImportHelper.addOrUpdateFromImportStatement(file, containingQName.toString(), importedName, asName, priority, anchor); } else { diff --git a/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/after/src/a.py b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/after/src/a.py new file mode 100644 index 000000000000..e54c46aa1d05 --- /dev/null +++ b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/after/src/a.py @@ -0,0 +1,7 @@ +from b import bar + + +def foo(): + bar() + + diff --git a/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/after/src/b.py b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/after/src/b.py new file mode 100644 index 000000000000..3392bc062e96 --- /dev/null +++ b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/after/src/b.py @@ -0,0 +1,2 @@ +def bar(): + pass \ No newline at end of file diff --git a/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/before/src/a.py b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/before/src/a.py new file mode 100644 index 000000000000..d6aea201cc93 --- /dev/null +++ b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/before/src/a.py @@ -0,0 +1,6 @@ +def foo(): + bar() + + +def bar(): + pass \ No newline at end of file diff --git a/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/before/src/b.py b/python/testData/refactoring/move/importForMovedElementWithPreferredQualifiedImportStyle/before/src/b.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java index 82336f72e7e6..f3288729866a 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyMoveTest.java @@ -26,6 +26,7 @@ import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.SystemProperties; import com.jetbrains.python.PythonTestUtil; +import com.jetbrains.python.codeInsight.PyCodeInsightSettings; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.PyClass; @@ -285,6 +286,18 @@ public class PyMoveTest extends PyTestCase { doMoveFileTest("pkg/subpkg2", ""); } + // PY-15218 + public void testImportForMovedElementWithPreferredQualifiedImportStyle() { + final boolean defaultImportStyle = PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT; + try { + PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT = false; + doMoveSymbolTest("bar", "b.py"); + } + finally { + PyCodeInsightSettings.getInstance().PREFER_FROM_IMPORT = defaultImportStyle; + } + } + private void doMoveFileTest(String fileName, String toDirName) { Project project = myFixture.getProject(); PsiManager manager = PsiManager.getInstance(project);