diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/EditorActionUtil.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/EditorActionUtil.java index 9ddac3c2aae5..e1c160f2f7f5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/EditorActionUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/EditorActionUtil.java @@ -198,9 +198,13 @@ public class EditorActionUtil { } } + int newSpacesEnd = lineStart + buf.length(); if (newCaretOffset >= spacesEnd) { newCaretOffset += buf.length() - (spacesEnd - lineStart); } + else if (newCaretOffset >= lineStart && newCaretOffset < spacesEnd && newCaretOffset > newSpacesEnd) { + newCaretOffset = newSpacesEnd; + } if (buf.length() > 0) { if (spacesEnd > lineStart) { diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/actions/EditorActionTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/actions/EditorActionTest.java index 2545df56d20c..13381591fb4d 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/actions/EditorActionTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/actions/EditorActionTest.java @@ -22,6 +22,7 @@ import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.impl.AbstractEditorTest; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.testFramework.EditorTestUtil; +import com.intellij.testFramework.LightPlatformCodeInsightTestCase; import com.intellij.testFramework.TestFileType; import java.awt.datatransfer.StringSelection; @@ -187,4 +188,10 @@ public class EditorActionTest extends AbstractEditorTest { "blah blah\n" + "blah blah"); } + + public void testCaretComesBeforeTextOnUnindent() throws IOException { + initText(" text"); + unindent(); + checkResultByText(" text"); + } } \ No newline at end of file