diff --git a/platform/util/src/com/intellij/openapi/util/UserDataHolderBase.java b/platform/util/src/com/intellij/openapi/util/UserDataHolderBase.java index 9e7c6b4dc79b..5a891aab3ace 100644 --- a/platform/util/src/com/intellij/openapi/util/UserDataHolderBase.java +++ b/platform/util/src/com/intellij/openapi/util/UserDataHolderBase.java @@ -2,7 +2,6 @@ package com.intellij.openapi.util; import com.intellij.ReviseWhenPortedToJDK; -import com.intellij.openapi.util.userData.ExternalUserDataStorage; import com.intellij.util.containers.VarHandleWrapper; import com.intellij.util.keyFMap.KeyFMap; import com.intellij.util.xmlb.annotations.Transient; @@ -10,26 +9,12 @@ import org.jetbrains.annotations.*; import java.io.Serializable; import java.util.Objects; -import java.util.function.Function; @ReviseWhenPortedToJDK("11") // rewrite to real VarHandles @Transient public class UserDataHolderBase implements UserDataHolderEx, Serializable { private static final Key COPYABLE_USER_MAP_KEY = Key.create("COPYABLE_USER_MAP_KEY"); - @Nullable - private static Function<@NotNull UserDataHolderBase, @Nullable ExternalUserDataStorage> ourExternalUserDataStorage = null; - - @ApiStatus.Internal - public static void setExternalUserDataStorage(@Nullable Function<@NotNull UserDataHolderBase, @Nullable ExternalUserDataStorage> provider) { - ourExternalUserDataStorage = provider; - } - - private @Nullable ExternalUserDataStorage externalStorage() { - Function<@NotNull UserDataHolderBase, @Nullable ExternalUserDataStorage> provider = ourExternalUserDataStorage; - return provider == null ? null : provider.apply(this); - } - private volatile @NotNull KeyFMap value = KeyFMap.EMPTY_MAP; private static final VarHandleWrapper VALUE_HANDLE = VarHandleWrapper.getFactory().create(UserDataHolderBase.class, "value", KeyFMap.class); @@ -62,43 +47,25 @@ public class UserDataHolderBase implements UserDataHolderEx, Serializable { @Override public T getUserData(@NotNull Key key) { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - return external.getUserData(this, key); - } - else { - T t = getUserMap().get(key); - if (t == null && key instanceof KeyWithDefaultValue) { - t = putUserDataIfAbsent(key, ((KeyWithDefaultValue)key).getDefaultValue()); - } - return t; + T t = getUserMap().get(key); + if (t == null && key instanceof KeyWithDefaultValue) { + t = putUserDataIfAbsent(key, ((KeyWithDefaultValue)key).getDefaultValue()); } + return t; } @ApiStatus.Internal public @NotNull KeyFMap getUserMap() { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - return external.getUserMap(this); - } - else { - return value; - } + return value; } @Override public void putUserData(@NotNull Key key, @Nullable T value) { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - external.putUserData(this, key, value); - } - else { - while (true) { - KeyFMap map = getUserMap(); - KeyFMap newMap = value == null ? map.minus(key) : map.plus(key, value); - if (newMap == map || changeUserMap(map, newMap)) { - break; - } + while (true) { + KeyFMap map = getUserMap(); + KeyFMap newMap = value == null ? map.minus(key) : map.plus(key, value); + if (newMap == map || changeUserMap(map, newMap)) { + break; } } } @@ -113,88 +80,45 @@ public class UserDataHolderBase implements UserDataHolderEx, Serializable { } public void putCopyableUserData(@NotNull Key key, T value) { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - while (true) { - KeyFMap oldCopyableMap = getUserData(COPYABLE_USER_MAP_KEY); - KeyFMap newCopyableMap = oldCopyableMap; - if (oldCopyableMap == null) { - if (value == null) { - //nothing - } - else { - newCopyableMap = KeyFMap.EMPTY_MAP.plus(key, value); - } - } - else { - if (value == null) { - newCopyableMap = oldCopyableMap.minus(key); - } - else { - newCopyableMap = oldCopyableMap.plus(key, value); - } - } - if ( - oldCopyableMap == newCopyableMap || - external.compareAndPutUserData(this, COPYABLE_USER_MAP_KEY, oldCopyableMap, newCopyableMap) - ) { - break; - } + while (true) { + KeyFMap map = getUserMap(); + KeyFMap copyableMap = map.get(COPYABLE_USER_MAP_KEY); + if (copyableMap == null) { + copyableMap = KeyFMap.EMPTY_MAP; } - } - else { - while (true) { - KeyFMap map = getUserMap(); - KeyFMap copyableMap = map.get(COPYABLE_USER_MAP_KEY); - if (copyableMap == null) { - copyableMap = KeyFMap.EMPTY_MAP; - } - KeyFMap newCopyableMap = value == null ? copyableMap.minus(key) : copyableMap.plus(key, value); - KeyFMap newMap = newCopyableMap.isEmpty() ? map.minus(COPYABLE_USER_MAP_KEY) : map.plus(COPYABLE_USER_MAP_KEY, newCopyableMap); - if (newMap == map || changeUserMap(map, newMap)) { - return; - } + KeyFMap newCopyableMap = value == null ? copyableMap.minus(key) : copyableMap.plus(key, value); + KeyFMap newMap = newCopyableMap.isEmpty() ? map.minus(COPYABLE_USER_MAP_KEY) : map.plus(COPYABLE_USER_MAP_KEY, newCopyableMap); + if (newMap == map || changeUserMap(map, newMap)) { + return; } } } @Override public boolean replace(@NotNull Key key, @Nullable T oldValue, @Nullable T newValue) { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - return external.compareAndPutUserData(this, key, oldValue, newValue); - } - else { - while (true) { - KeyFMap map = getUserMap(); - if (map.get(key) != oldValue) { - return false; - } - KeyFMap newMap = newValue == null ? map.minus(key) : map.plus(key, newValue); - if (newMap == map || changeUserMap(map, newMap)) { - return true; - } + while (true) { + KeyFMap map = getUserMap(); + if (map.get(key) != oldValue) { + return false; + } + KeyFMap newMap = newValue == null ? map.minus(key) : map.plus(key, newValue); + if (newMap == map || changeUserMap(map, newMap)) { + return true; } } } @Override public @NotNull T putUserDataIfAbsent(final @NotNull Key key, final @NotNull T value) { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - return external.putUserDataIfAbsent(this, key, value); - } - else { - while (true) { - KeyFMap map = getUserMap(); - T oldValue = map.get(key); - if (oldValue != null) { - return oldValue; - } - KeyFMap newMap = map.plus(key, value); - if (newMap == map || changeUserMap(map, newMap)) { - return value; - } + while (true) { + KeyFMap map = getUserMap(); + T oldValue = map.get(key); + if (oldValue != null) { + return oldValue; + } + KeyFMap newMap = map.plus(key, value); + if (newMap == map || changeUserMap(map, newMap)) { + return value; } } } @@ -213,13 +137,7 @@ public class UserDataHolderBase implements UserDataHolderEx, Serializable { } protected void setUserMap(@NotNull KeyFMap map) { - ExternalUserDataStorage external = externalStorage(); - if (external != null) { - external.setUserMap(this, map); - } - else { - value = map; - } + value = map; } public boolean isUserDataEmpty() { diff --git a/platform/util/src/com/intellij/openapi/util/userData/ExternalUserDataStorage.kt b/platform/util/src/com/intellij/openapi/util/userData/ExternalUserDataStorage.kt deleted file mode 100644 index ea2857645f43..000000000000 --- a/platform/util/src/com/intellij/openapi/util/userData/ExternalUserDataStorage.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.intellij.openapi.util.userData - -import com.intellij.openapi.util.Key -import com.intellij.openapi.util.UserDataHolder -import com.intellij.util.keyFMap.KeyFMap -import org.jetbrains.annotations.ApiStatus - -@ApiStatus.Internal -interface ExternalUserDataStorage { - - fun getUserData(obj: UserDataHolder, key: Key): T? - - fun putUserData(obj: UserDataHolder, key: Key, value: T?) - - fun compareAndPutUserData(obj: UserDataHolder, key: Key, oldValue: T?, newValue: T?): Boolean - - fun getUserMap(obj: UserDataHolder): KeyFMap - - fun setUserMap(obj: UserDataHolder, userMap: KeyFMap) - - fun putUserDataIfAbsent(obj: UserDataHolder, key: Key, value: T): T -} \ No newline at end of file