boolean (Project project, Editor editor, PsiFile file, int offset) { if (offset == 0) return false; CharSequence chars = editor.getDocument().getCharsSequence(); if (chars.charAt(offset - 1) != '>') return false; EditorHighlighter highlighter = editor.getHighlighter(); HighlighterIterator iterator = highlighter.createIterator(offset - 1); if (iterator.getTokenType() != XmlTokenType.XML_TAG_END) return false; if (isAtTheEndOfEmptyTag(project, editor, file, iterator)) { return false; } iterator.retreat(); int retrieveCount = 1; while(!iterator.atEnd()) { final IElementType tokenType = iterator.getTokenType(); if (tokenType == XmlTokenType.XML_END_TAG_START) return false; if (tokenType == XmlTokenType.XML_START_TAG_START) break; ++retrieveCount; iterator.retreat(); } for(int i = 0; i < retrieveCount; ++i) iterator.advance(); iterator.advance(); return !iterator.atEnd() && iterator.getTokenType() == XmlTokenType.XML_END_TAG_START; }