void (Caret caret, IndentGuideDescriptor guide) { Editor editor = caret.getEditor(); final Document doc = editor.getDocument(); int startOffset = editor.logicalPositionToOffset(new LogicalPosition(guide.startLine, 0)); int endOffset = guide.endLine >= doc.getLineCount() ? doc.getTextLength() : doc.getLineStartOffset(guide.endLine); final VirtualFile file = editor.getVirtualFile(); if (file != null) { // Make sure selection contains closing matching brace. final CharSequence chars = doc.getCharsSequence(); int nonWhitespaceOffset = CharArrayUtil.shiftForward(chars, endOffset, " \t\n"); HighlighterIterator iterator = editor.getHighlighter().createIterator(nonWhitespaceOffset); if (BraceMatchingUtil.isRBraceToken(iterator, chars, file.getFileType())) { if (editor.offsetToLogicalPosition(iterator.getStart()).column == guide.indentLevel) { endOffset = iterator.getEnd(); endOffset = CharArrayUtil.shiftForward(chars, endOffset, " \t"); if (endOffset < chars.length() && chars.charAt(endOffset) == '\n') endOffset++; } } } caret.setSelection(startOffset, endOffset); }