String (RegExpPattern pattern) { final StringBuilder text = new StringBuilder("["); for (RegExpBranch branch : pattern.getBranches()) { for (PsiElement child : branch.getChildren()) { if (!(child instanceof RegExpChar ch)) { return null; } final IElementType type = ch.getNode().getFirstChildNode().getElementType(); if (type == RegExpTT.REDUNDANT_ESCAPE) { final int value = ch.getValue(); if (value == ']') { text.append(ch.getUnescapedText()); } else if (value == '-' && text.length() != 1) { text.append("\\-"); } else { text.append((char)value); } } else if (type == RegExpTT.ESC_CHARACTER) { final int value = ch.getValue(); switch (value) { case '.', '$', '?', '*', '+', '|', '{', '(', ')' -> text.append((char)value); case '^' -> { if (text.length() == 1) { text.append(ch.getUnescapedText()); } else { text.append((char)value); } } default -> text.append(ch.getUnescapedText()); } } else { final int value = ch.getValue(); switch (value) { case ']': text.append("\\]"); break; case '-': if (text.length() != 1) { text.append("\\-"); break; } default: text.append(ch.getUnescapedText()); } } } } text.append("]"); return text.toString(); } }