public static void put(@NotNull UserDataHolder holder, Icon icon, int flags) {
    Reference<Int2ObjectMap<Icon>> ref = holder.getUserData(LAST_COMPUTED_ICON);
    Int2ObjectMap<Icon> map = dereference(ref);
    if (icon == null) {
      if (map == null) {
        return;
      }
    }
    else {
      while (map == null) {
        Int2ObjectMap<Icon> freshMap = Int2ObjectMaps.synchronize(new Int2ObjectOpenHashMap<>());
        if (((UserDataHolderEx)holder).replace(LAST_COMPUTED_ICON, ref, new SoftReference<>(freshMap))) {
          map = freshMap;
        }
        else {
          map = dereference(holder.getUserData(LAST_COMPUTED_ICON));
        }
      }
    }
    if (icon == null) {
      map.remove(flags);
    }
    else {
      map.put(flags, icon);
    }
  }
public static void put(@NotNull UserDataHolder holder, Icon icon, int flags)