void (@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); } }