public @Nullable FList<TextRange> matchingFragments() {
      if (myPattern.length > TYPO_AWARE_PATTERN_LIMIT) return null;

      int length = myName.length();
      if (length < myMinNameLength) {
        return null;
      }

      //we're in typo mode, but non-ascii symbols are used. so aborting
      if (myTypoAware && !isAsciiName) return null;

      if (!myTypoAware) {
        int patternIndex = 0;
        if (myMeaningfulCharacters.length > 0) {
          for (int i = 0; i < length; ++i) {
            char c = myName.charAt(i);
            if (c == myMeaningfulCharacters[patternIndex] || c == myMeaningfulCharacters[patternIndex + 1]) {
              patternIndex += 2;
              if (patternIndex >= myMeaningfulCharacters.length) {
                break;
              }
            }
          }
        }
        if (patternIndex < myMinNameLength * 2) {
          return null;
        }
      }

      return matchWildcards(0, 0, new ErrorState());
    }
public @Nullable FList<TextRange> matchingFragments()