diff --git a/platform/util/src/com/intellij/openapi/util/FieldCache.java b/platform/util/src/com/intellij/openapi/util/FieldCache.java index 1c4e86815b6c..23e70510eadc 100644 --- a/platform/util/src/com/intellij/openapi/util/FieldCache.java +++ b/platform/util/src/com/intellij/openapi/util/FieldCache.java @@ -30,7 +30,7 @@ public abstract class FieldCache { w = ourLock.writeLock(); } - public final T get(AccessorParameter a, Owner owner, Parameter p) { + public T get(AccessorParameter a, Owner owner, Parameter p) { r.lock(); T result; try { @@ -68,7 +68,7 @@ public abstract class FieldCache { } } - public final void clear(AccessorParameter a, Owner owner) { + public void clear(AccessorParameter a, Owner owner) { w.lock(); try { putValue(null, owner, a); @@ -81,4 +81,4 @@ public abstract class FieldCache { protected abstract T compute(Owner owner, Parameter p); protected abstract T getValue(Owner owner, AccessorParameter p); protected abstract void putValue(T t, Owner owner, AccessorParameter p); -} \ No newline at end of file +} diff --git a/platform/util/src/com/intellij/openapi/util/UserDataCache.java b/platform/util/src/com/intellij/openapi/util/UserDataCache.java index 3264461148af..c4da2c94525f 100644 --- a/platform/util/src/com/intellij/openapi/util/UserDataCache.java +++ b/platform/util/src/com/intellij/openapi/util/UserDataCache.java @@ -44,4 +44,19 @@ public abstract class UserDataCache exte protected final void putValue(final T t, final Owner owner, final Key key) { owner.putUserData(key, t); } + + @Override + public T get(Key a, Owner owner, Param p) { + T value = owner.getUserData(a); + if (value == null) { + value = compute(owner, p); + value = ((UserDataHolderEx)owner).putUserDataIfAbsent(a, value); + } + return value; + } + + @Override + public void clear(Key key, Owner owner) { + owner.putUserData(key, null); + } }