TextRange () { ASTNode node = getNode(); ASTNode firstNode = node.findChildByType(RegExpTT.CARET); if (firstNode == null) { firstNode = node.findChildByType(RegExpTT.LBRACE); } assert firstNode != null; ASTNode eq = node.findChildByType(RegExpTT.EQ); final ASTNode rbrace = node.findChildByType(RegExpTT.RBRACE); int to; if (eq != null) { to = eq.getTextRange().getEndOffset() - 1; } else if (rbrace != null) { to = rbrace.getTextRange().getEndOffset() - 1; } else { to = getTextRange().getEndOffset(); } final TextRange t = new TextRange(firstNode.getStartOffset() + 1, to); return t.shiftRight(-getTextRange().getStartOffset()); }