From f3f444a18893cc49def4a98d194c1936f2c810ae Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 23 Mar 2011 16:21:52 +0100 Subject: [PATCH] cachedValue should cache wisely --- .../src/com/intellij/util/CachedValueBase.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/util/CachedValueBase.java b/platform/platform-impl/src/com/intellij/util/CachedValueBase.java index 8caa460fb5e1..d8d71dbbef68 100644 --- a/platform/platform-impl/src/com/intellij/util/CachedValueBase.java +++ b/platform/platform-impl/src/com/intellij/util/CachedValueBase.java @@ -19,9 +19,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.ModificationTracker; -import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.*; import com.intellij.psi.util.CachedValueProvider; import com.intellij.reference.SoftReference; import gnu.trove.TLongArrayList; @@ -76,9 +74,6 @@ public abstract class CachedValueBase { myData = null; } - public void setDataLocked(boolean value) { - } - public boolean hasUpToDateValue() { return getUpToDateOrNull(false) != null; } @@ -186,10 +181,15 @@ public abstract class CachedValueBase { return value == ObjectUtils.NULL ? null : value; } + RecursionGuard.StackStamp stamp = RecursionManager.createGuard("cachedValue").markStack(); + // compute outside lock to avoid deadlock CachedValueProvider.Result result = doCompute(param); - return setValue(result); + if (stamp.mayCacheNow()) { + return setValue(result); + } + return result == null ? null : result.getValue(); } protected abstract

CachedValueProvider.Result doCompute(P param);