public static <K, V> @NotNull Map<K, V> createKeyDescriptorHashedMap(@NotNull KeyDescriptor<? super K> keyDescriptor) {
    return new Object2ObjectOpenCustomHashMap<>(new Hash.Strategy<K>() {
      @Override
      public int hashCode(@Nullable K o) {
        return o == null ? 0 : keyDescriptor.getHashCode(o);
      }

      @Override
      public boolean equals(@Nullable K a, @Nullable K b) {
        return a == b || (a != null && b != null && keyDescriptor.isEqual(a, b));
      }
    });
  }
public static <K, V> @NotNull Map<K, V> createKeyDescriptorHashedMap(@NotNull KeyDescriptor<? super K> keyDescriptor)