int (Project project, CharSequence text, int offset, int start, int end) { PsiFile file = PsiFileFactory.getInstance(project) .createFileFromText("dummy.xml", XmlFileType.INSTANCE, text, LocalTimeCounter.currentTime(), false); PsiElement element = file.findElementAt(offset); if (offset < end && element instanceof XmlToken && ((XmlToken)element).getTokenType() == XmlTokenType.XML_END_TAG_START) { return offset; } int newOffset = -1; XmlTag tag = PsiTreeUtil.findElementOfClassAtRange(file, start, end, XmlTag.class); if (tag != null) { for (PsiElement child : tag.getChildren()) { if (child instanceof XmlToken && ((XmlToken)child).getTokenType() == XmlTokenType.XML_END_TAG_START) { newOffset = child.getTextOffset(); } } } if (newOffset >= 0) { return newOffset; } return offset; }