void (Editor editor) { int lineNumber = editor.getCaretModel().getLogicalPosition().line; int afterLineEnd = EditorModificationUtil.calcAfterLineEnd(editor); Document document = editor.getDocument(); int offset = editor.getCaretModel().getOffset(); if (afterLineEnd < 0 // There is a possible case that caret is located right before the soft wrap position at the last logical line // (popular use case with the soft wraps at the commit message dialog). || (offset < document.getTextLength() - 1 && editor.getSoftWrapModel().getSoftWrap(offset) != null)) { FoldRegion region = editor.getFoldingModel().getCollapsedRegionAtOffset(offset); if (region != null && region.shouldNeverExpand()) { document.deleteString(region.getStartOffset(), region.getEndOffset()); editor.getCaretModel().moveToOffset(region.getStartOffset()); } else { document.deleteString(offset, DocumentUtil.getNextCodePointOffset(document, offset)); } return; } if (lineNumber + 1 >= document.getLineCount()) return; // Do not group delete newline and other deletions. CommandProcessor commandProcessor = CommandProcessor.getInstance(); commandProcessor.setCurrentCommandGroupId(null); int nextLineStart = document.getLineStartOffset(lineNumber + 1); int nextLineEnd = document.getLineEndOffset(lineNumber + 1); if (nextLineEnd - nextLineStart > 0) { StringBuilder buf = new StringBuilder(); StringUtil.repeatSymbol(buf, ' ', afterLineEnd); document.insertString(getCaretLineStart(editor) + getCaretLineLength(editor), buf.toString()); nextLineStart = document.getLineStartOffset(lineNumber + 1); } int thisLineEnd = document.getLineEndOffset(lineNumber); document.deleteString(thisLineEnd, nextLineStart); }