From dafd870b859767e51a5443fbe5e09197f486a0f2 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 12 Nov 2014 20:59:36 +0300 Subject: [PATCH] Do not create __init__.py when moving namespace packages --- .../refactoring/move/PyMoveFileHandler.java | 18 ++++++++++++++++-- .../after/src/nssubpkg/__init__.py | 1 - .../after/src/nspkg/__init__.py | 1 - 3 files changed, 16 insertions(+), 4 deletions(-) delete mode 100644 python/testData/refactoring/move/moveNamespacePackageTest1/after/src/nssubpkg/__init__.py delete mode 100644 python/testData/refactoring/move/moveNamespacePackageTest3/after/src/nspkg/__init__.py diff --git a/python/src/com/jetbrains/python/refactoring/move/PyMoveFileHandler.java b/python/src/com/jetbrains/python/refactoring/move/PyMoveFileHandler.java index 0c9efef01200..7044a978438d 100644 --- a/python/src/com/jetbrains/python/refactoring/move/PyMoveFileHandler.java +++ b/python/src/com/jetbrains/python/refactoring/move/PyMoveFileHandler.java @@ -23,15 +23,16 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.QualifiedName; import com.intellij.refactoring.RefactoringSettings; import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFileHandler; import com.intellij.usageView.UsageInfo; import com.intellij.util.IncorrectOperationException; +import com.jetbrains.python.PyNames; import com.jetbrains.python.PythonFileType; import com.jetbrains.python.actions.CreatePackageAction; import com.jetbrains.python.codeInsight.imports.PyImportOptimizer; import com.jetbrains.python.psi.*; -import com.intellij.psi.util.QualifiedName; import com.jetbrains.python.psi.resolve.QualifiedNameFinder; import com.jetbrains.python.refactoring.PyRefactoringUtil; import com.jetbrains.python.refactoring.classes.PyClassRefactoringUtil; @@ -64,13 +65,26 @@ public class PyMoveFileHandler extends MoveFileHandler { root = root.getParentDirectory(); } final boolean searchForReferences = RefactoringSettings.getInstance().MOVE_SEARCH_FOR_REFERENCES_FOR_FILE; - if (moveDestination != root && root != null && searchForReferences) { + if (moveDestination != root && root != null && searchForReferences && !probablyNamespacePackage(file, moveDestination, root)) { CreatePackageAction.createInitPyInHierarchy(moveDestination, root); } } // TODO: Update relative imports } + private static boolean probablyNamespacePackage(@NotNull PsiFile anchor, @NotNull PsiDirectory destination, @NotNull PsiDirectory root) { + if (!LanguageLevel.forElement(anchor).isAtLeast(LanguageLevel.PYTHON33)) { + return false; + } + while (destination != null && destination != root) { + if (destination.findFile(PyNames.INIT_DOT_PY) != null) { + return false; + } + destination = destination.getParent(); + } + return true; + } + @Override public List findUsages(PsiFile file, PsiDirectory newParent, boolean searchInComments, boolean searchInNonJavaFiles) { if (file != null) { diff --git a/python/testData/refactoring/move/moveNamespacePackageTest1/after/src/nssubpkg/__init__.py b/python/testData/refactoring/move/moveNamespacePackageTest1/after/src/nssubpkg/__init__.py deleted file mode 100644 index 09ee69e66c3c..000000000000 --- a/python/testData/refactoring/move/moveNamespacePackageTest1/after/src/nssubpkg/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'user1' diff --git a/python/testData/refactoring/move/moveNamespacePackageTest3/after/src/nspkg/__init__.py b/python/testData/refactoring/move/moveNamespacePackageTest3/after/src/nspkg/__init__.py deleted file mode 100644 index 09ee69e66c3c..000000000000 --- a/python/testData/refactoring/move/moveNamespacePackageTest3/after/src/nspkg/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'user1'