@Override
  public @Nullable FList<TextRange> matchingFragments(@NotNull String name) {
    if (name.length() < myMinNameLength) {
      return null;
    }

    if (myPattern.length > MAX_CAMEL_HUMP_MATCHING_LENGTH) {
      return matchBySubstring(name);
    }

    int length = name.length();
    int patternIndex = 0;
    for (int i = 0; i < length && patternIndex < myMeaningfulCharacters.length; ++i) {
      char c = name.charAt(i);
      if (c == myMeaningfulCharacters[patternIndex] || c == myMeaningfulCharacters[patternIndex + 1]) {
        patternIndex += 2;
      }
    }
    if (patternIndex < myMinNameLength * 2) {
      return null;
    }
    boolean isAscii = AsciiUtils.isAscii(name);
    return matchWildcards(name, 0, 0, isAscii);
  }
@Override
  public @Nullable FList<TextRange> matchingFragments(@NotNull String name)