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