From 7d862340df403947080eb6ebe20bea75c722e902 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 19 Mar 2015 21:09:49 +0300 Subject: [PATCH] PY-15336 Search for definitions in selection only if it spans several lines Otherwise we lose the ability to move symbol referenced by element under caret: user probably would not try to pick the element in such case by multiline selection anyway. Also count only definitions that fall in selection entirely, because this policy is much less confusing. --- .../refactoring/move/PyMoveModuleMembersDelegate.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/refactoring/move/PyMoveModuleMembersDelegate.java b/python/src/com/jetbrains/python/refactoring/move/PyMoveModuleMembersDelegate.java index 815c2b627a42..c1c84717490a 100644 --- a/python/src/com/jetbrains/python/refactoring/move/PyMoveModuleMembersDelegate.java +++ b/python/src/com/jetbrains/python/refactoring/move/PyMoveModuleMembersDelegate.java @@ -102,7 +102,7 @@ public class PyMoveModuleMembersDelegate extends MoveHandlerDelegate { if (editor != null) { final Document document = editor.getDocument(); targetContainer = PsiDocumentManager.getInstance(project).getPsiFile(document); - if (targetContainer instanceof PyFile) { + if (targetContainer instanceof PyFile && selectionSpansMultipleLines(editor)) { final List moduleMembers = collectAllMovableElementsInSelection(editor, (PyFile)targetContainer); if (moduleMembers.isEmpty()) { showBadSelectionErrorHint(project, editor); @@ -134,6 +134,12 @@ public class PyMoveModuleMembersDelegate extends MoveHandlerDelegate { RefactoringBundle.message("error.title"), null); } + private static boolean selectionSpansMultipleLines(@NotNull Editor editor) { + final SelectionModel selectionModel = editor.getSelectionModel(); + final Document document = editor.getDocument(); + return document.getLineNumber(selectionModel.getSelectionStart()) != document.getLineNumber(selectionModel.getSelectionEnd()); + } + @NotNull private static List collectAllMovableElementsInSelection(@NotNull Editor editor, @NotNull PyFile pyFile) { final SelectionModel selectionModel = editor.getSelectionModel(); @@ -143,7 +149,7 @@ public class PyMoveModuleMembersDelegate extends MoveHandlerDelegate { @Override public boolean value(PyElement member) { final PsiElement body = PyMoveModuleMembersHelper.expandNamedElementBody(((PsiNamedElement)member)); - return body != null && body.getTextRange().intersects(selectionRange); + return body != null && selectionRange.contains(body.getTextRange()); } }); }