int (Editor editor, PsiFile file) { int offset = editor.getCaretModel().getOffset() - 1; if (offset < 0) return -1; Document document = editor.getDocument(); final FileType fileType = getFileType(file, offset); HighlighterIterator iterator = editor.getHighlighter().createIterator(offset); int depth = 0; Language braceType; boolean isAfterRBrace = false; if (isRStructuralBrace(fileType, iterator, document.getCharsSequence())) { isAfterRBrace = true; depth = -1; braceType = getBraceType(iterator); } else { braceType = null; } boolean moved = false; while (true) { if (iterator.atEnd()) return -1; if (isLStructuralBrace(fileType, iterator, document.getCharsSequence()) && (braceType == getBraceType(iterator) || braceType == null)) { if (braceType == null) { braceType = getBraceType(iterator); } if (moved) { if (depth == 0) break; depth--; } } else if (isRStructuralBrace(fileType, iterator, document.getCharsSequence()) && (braceType == getBraceType(iterator) || braceType == null)) { if (braceType == null) { braceType = getBraceType(iterator); } depth++; } moved = true; iterator.retreat(); } return isAfterRBrace ? iterator.getStart() : iterator.getEnd(); }