From 0bc9e33f28b9531274c6b7dcd3c583c36b8261d6 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 31 Jan 2019 17:08:54 +0100 Subject: [PATCH] disable Move statement up/down on strange case block selection (IDEA-CR-41973) --- .../editorActions/moveUpDown/CaseBlockMover.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/CaseBlockMover.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/CaseBlockMover.java index 9b33d4dfd418..6ce870362f0a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/CaseBlockMover.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/CaseBlockMover.java @@ -25,17 +25,19 @@ public class CaseBlockMover extends LineMover { final Document document = editor.getDocument(); int startOffset = document.getLineStartOffset(info.toMove.startLine); - int endOffset = document.getLineEndOffset(info.toMove.endLine); + int endOffset = document.getLineStartOffset(info.toMove.endLine); List statements = new SmartList<>(); + PsiElement firstElement = null; for (PsiElement element : CodeInsightUtil.findStatementsInRange(file, startOffset, endOffset)) { if (element instanceof PsiSwitchLabelStatement) { statements.add((PsiSwitchLabelStatement)element); } else if (statements.isEmpty()) { - return false; // if first statement is not a label let the regular statement mover handle it. + firstElement = element; } } if (statements.isEmpty()) return false; + if (firstElement != null) return info.prohibitMove(); // nonsensical selection PsiSwitchLabelStatement firstToMove = getThisCaseBlockStart(statements.get(0)); PsiSwitchLabelStatement lastStatement = statements.get(statements.size() - 1);