@Contract("_,true->!null")
  private CharSegment[] internParts(@NotNull CharSequence path, boolean forAddition) {
    int start = 0;
    boolean asBytes = forAddition && IOUtil.isAscii(path);
    List<CharSegment> key = new ArrayList<>();
    SubSegment flyweightKey = new SubSegment();
    while (start < path.length()) {
      flyweightKey.findSubStringUntilNextSeparator(path, start);
      CharSegment interned = interner.get(flyweightKey);
      if (interned == null) {
        if (!forAddition) {
          return null;
        }
        interned = flyweightKey.createPersistentCopy(asBytes);
        interner.addOrGet(interned);
      }
      key.add(interned);
      start += flyweightKey.length();
    }
    return key.toArray(new CharSegment[0]);
  }
@Contract("_,true->!null")
  private CharSegment[] internParts(@NotNull CharSequence path, boolean forAddition)