docs: @SuppressWarnings({"AssignmentToMethodParameter"})
      @NotNull
      StoreImpl openStoreImpl(@NotNull final String name,
                              @NotNull StoreConfig config,
                              @NotNull final TransactionBase txn,
                              @Nullable TreeMetaInfo metaInfo) {
          checkIfTransactionCreatedAgainstThis(txn);
          if (config.useExisting) { // this parameter requires to recalculate
              if (metaInfo == null) {
                  throw new ExodusException("Can't restore meta information for store " + name);
              } else {
                  config = TreeMetaInfo.toConfig(metaInfo);
              }
          }
          final StoreImpl result;
          if (metaInfo == null) {
              if (txn.isReadonly() && ec.getEnvReadonlyEmptyStores()) {
                  return createTemporaryEmptyStore(name);
              }
              final int structureId = allocateStructureId();
              metaInfo = TreeMetaInfo.load(this, config.duplicates, config.prefixing, structureId);
              result = createStore(name, metaInfo);
              final ReadWriteTransaction tx = throwIfReadonly(txn, "Can't create a store in read-only transaction");
              tx.getMutableTree(result);
              tx.storeCreated(result);
          } else {
              final boolean hasDuplicates = metaInfo.hasDuplicates();
              if (hasDuplicates != config.duplicates) {
                  throw new ExodusException("Attempt to open store '" + name + "' with duplicates = " +
                      config.duplicates + " while it was created with duplicates =" + hasDuplicates);
              }
              if (metaInfo.isKeyPrefixing() != config.prefixing) {
                  if (!config.prefixing) {
                      throw new ExodusException("Attempt to open store '" + name +
                          "' with prefixing = false while it was created with prefixing = true");
                  }
                  // if we're trying to open existing store with prefixing which actually wasn't created as store
                  // with prefixing due to lack of the PatriciaTree feature, then open store with existing config
                  metaInfo = TreeMetaInfo.load(this, hasDuplicates, false, metaInfo.getStructureId());
              }
              result = createStore(name, metaInfo);
          }
          return result;
      }