TextRange (@NotNull PsiElement e, @NotNull CharSequence documentText, int minOffset) { TextRange range = e.getTextRange(); int endOffset = range.getEndOffset(); int startOffset = range.getStartOffset(); ASTNode node = BasicJavaAstTreeUtil.toNode(e); if (node == null) { return null; } List<ASTNode> children = BasicJavaAstTreeUtil.getChildren(node); for (int i = children.size() - 1; i >= 0; i--) { ASTNode child = children.get(i); int childStartOffset = child.getTextRange().getStartOffset(); if (childStartOffset <= minOffset) { break; } if (BasicJavaAstTreeUtil.isDocToken(child)) { CharSequence chars = child.getChars(); int shift = CharArrayUtil.shiftForward(chars, 0, " \t\n\r"); if (shift != chars.length() && !BasicJavaAstTreeUtil.is(child, JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS)) { break; } } else if (!(BasicJavaAstTreeUtil.isWhiteSpace(child))) { break; } endOffset = Math.min(childStartOffset, endOffset); } startOffset = CharArrayUtil.shiftBackward(documentText, startOffset - 1, "* \t") + 1; return new TextRange(startOffset, endOffset); }