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