diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/JoinLinesHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/JoinLinesHandler.java index 6d1d205082d0..6ad314ae79c7 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/JoinLinesHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/JoinLinesHandler.java @@ -115,7 +115,7 @@ public class JoinLinesHandler extends EditorWriteActionHandler { int caretRestoreOffset = -1; // joining lines, several times if selection is multiline for (int i = startLine; i < endLine; i++) { - if (i >= doc.getLineCount() - 1) break; + if (startLine >= doc.getLineCount() - 1) break; docManager.doPostponedOperationsAndUnblockDocument(doc); docManager.commitDocument(doc); diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java index 9b9631b49b5b..ede958188b5a 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java @@ -89,6 +89,7 @@ public interface IdeActions { @NonNls String ACTION_CUT = "$Cut"; @NonNls String ACTION_DELETE = "$Delete"; @NonNls String ACTION_PASTE = "$Paste"; + @NonNls String ACTION_SELECT_ALL = "$SelectAll"; @NonNls String ACTION_CONTEXT_HELP = "ContextHelp"; @NonNls String ACTION_EDIT_SOURCE = "EditSource"; @NonNls String ACTION_VIEW_SOURCE = "ViewSource"; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/JoinLinesAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/JoinLinesAction.java index 01ecfd889e3b..19b3c6fb5081 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/JoinLinesAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/JoinLinesAction.java @@ -54,7 +54,7 @@ public class JoinLinesAction extends TextComponentEditorAction { int caretRestoreOffset = -1; for (int i = startLine; i < endLine; i++) { - if (i >= doc.getLineCount() - 1) break; + if (startLine >= doc.getLineCount() - 1) break; CharSequence text = doc.getCharsSequence(); int end = doc.getLineEndOffset(startLine) + doc.getLineSeparatorLength(startLine); int start = end - doc.getLineSeparatorLength(startLine); 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 b7d4fb64c7c6..c1009b03199f 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 @@ -234,4 +234,11 @@ public class EditorActionTest extends AbstractEditorTest { executeAction(IdeActions.ACTION_EDITOR_TOGGLE_CASE); checkResultByText("class C { String s = \"AB\\nCD\"; }"); } + + public void testJoinSeveralLinesAtDocumentEnd() throws Exception { + initText("a\nb\nc"); + executeAction(IdeActions.ACTION_SELECT_ALL); + executeAction(IdeActions.ACTION_EDITOR_JOIN_LINES); + checkResultByText("a b c"); + } } \ No newline at end of file