public static @NotNull <K, V> V cacheOrGet(@NotNull ConcurrentMap<K, V> map, final @NotNull K key, final @NotNull V defaultValue) {
    V v = map.get(key);
    if (v != null) return v;
    V prev = map.putIfAbsent(key, defaultValue);
    return prev == null ? defaultValue : prev;
  }
public static @NotNull <K, V> V cacheOrGet(@NotNull ConcurrentMap<K, V> map, final @NotNull K key, final @NotNull V defaultValue)