public static List parseSimpleExpression()

in src/main/java/com/intellij/internal/statistic/eventLog/validator/rules/utils/ValidationSimpleRuleFactory.java [163:198]


  public static List<String> parseSimpleExpression(@NotNull String s) {
    int currentRuleStart = s.indexOf(START);
    if (StringUtil.isEmptyOrSpaces(s)) return Collections.emptyList();
    if (currentRuleStart == -1) return Collections.singletonList(s);
    int lastRuleEnd = -1;

    final List<String> nodes = new ArrayList<>();
    if (currentRuleStart > 0) addNonEmpty(nodes, s.substring(0, currentRuleStart));

    while (currentRuleStart >= 0) {
      int currentRuleEnd;
      int nextRule;

      if (s.startsWith("regexp:", currentRuleStart + START.length())) {
        currentRuleEnd = getPairBracket(s,currentRuleStart);
        nextRule = s.indexOf(START, currentRuleEnd);
      }else{
        currentRuleEnd = s.indexOf(END, currentRuleStart);
        nextRule = s.indexOf(START, currentRuleStart + START.length());
      }

      if (currentRuleEnd == -1) return Collections.emptyList();
      lastRuleEnd = currentRuleEnd + END.length();

      // check invalid '{aaa{bb}', but valid '{regexp:aa{b}}' and '{regexp:aa}bb'
      if (nextRule > 0 && nextRule < lastRuleEnd)
        return Collections.emptyList();

      addNonEmpty(nodes, s.substring(currentRuleStart, lastRuleEnd));
      currentRuleStart = s.indexOf(START, lastRuleEnd);

      if (currentRuleStart > 0) addNonEmpty(nodes, s.substring(lastRuleEnd, currentRuleStart));
    }
    if (lastRuleEnd > 0) addNonEmpty(nodes, s.substring(lastRuleEnd));
    return nodes;
  }