From 52710f404a7bac9161e8bd8a6d6ed34852adcced Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 17 Aug 2011 11:09:58 +0200 Subject: [PATCH] a more user-friendly doPreventingRecursion --- .../src/com/intellij/openapi/util/RecursionManager.java | 9 +++++++++ .../groovy/lang/psi/impl/TypeInferenceHelper.java | 2 +- .../lang/psi/impl/synthetic/GroovyScriptClass.java | 2 +- .../plugins/groovy/lang/psi/util/GrClassImplUtil.java | 2 +- .../plugins/groovy/spock/SpockVariableDescriptor.java | 5 +---- xml/impl/src/com/intellij/xml/util/XmlUtil.java | 2 +- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/platform/util/src/com/intellij/openapi/util/RecursionManager.java b/platform/util/src/com/intellij/openapi/util/RecursionManager.java index a639194fe217..23453dede993 100644 --- a/platform/util/src/com/intellij/openapi/util/RecursionManager.java +++ b/platform/util/src/com/intellij/openapi/util/RecursionManager.java @@ -56,6 +56,15 @@ public class RecursionManager { } }; + /** + * @see RecursionGuard#doPreventingRecursion(Object, boolean, Computable) + */ + @SuppressWarnings("JavaDoc") + @Nullable + public static T doPreventingRecursion(@NotNull Object key, boolean memoize, Computable computation) { + return createGuard(computation.getClass().getName()).doPreventingRecursion(key, memoize, computation); + } + /** * @param id just some string to separate different recursion prevention policies from each other * @return a helper object which allow you to perform reentrancy-safe computations and check whether caching will be safe. diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java index e053645d7297..6396084c63dc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/TypeInferenceHelper.java @@ -54,7 +54,7 @@ public class TypeInferenceHelper { @Nullable public static PsiType getInferredType(@NotNull final GrReferenceExpression refExpr) { - return RecursionManager.createGuard("refType").doPreventingRecursion(refExpr, true, new Computable() { + return RecursionManager.doPreventingRecursion(refExpr, true, new Computable() { @Override public PsiType compute() { @SuppressWarnings("unchecked") GroovyPsiElement scope = diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java index 6e8a36fec808..872117e2a8ca 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java @@ -352,7 +352,7 @@ public class GroovyScriptClass extends LightElement implements GrMemberOwner, Sy return CachedValuesManager.getManager(getProject()).getCachedValue(this, new CachedValueProvider>() { @Override public Result> compute() { - List result = RecursionManager.createGuard("groovy.scriptFields").doPreventingRecursion(GroovyScriptClass.this, true, new Computable>() { + List result = RecursionManager.doPreventingRecursion(GroovyScriptClass.this, true, new Computable>() { @Override public List compute() { final List result = new ArrayList(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java index c84526702fb4..17506849afde 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java @@ -129,7 +129,7 @@ public class GrClassImplUtil { @Nullable private static List getImplementsFromDelegate(@NotNull final GrTypeDefinition grType, final Set visited) { - return RecursionManager.createGuard("groovyDelegateFields").doPreventingRecursion(grType, true, new Computable>() { + return RecursionManager.doPreventingRecursion(grType, true, new Computable>() { @Override public List compute() { List result = new ArrayList(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockVariableDescriptor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockVariableDescriptor.java index c25dd92a07f6..5b03de4c03f9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockVariableDescriptor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockVariableDescriptor.java @@ -1,7 +1,6 @@ package org.jetbrains.plugins.groovy.spock; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.RecursionGuard; import com.intellij.openapi.util.RecursionManager; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; @@ -29,8 +28,6 @@ public class SpockVariableDescriptor { private PsiVariable myVariable; - private static final RecursionGuard guard = RecursionManager.createGuard("SpockVariableDescriptor"); - public SpockVariableDescriptor(PsiElement navigationElement, String name) { myName = name; myNavigationElement = navigationElement; @@ -63,7 +60,7 @@ public class SpockVariableDescriptor { if (myVariable == null) { final PsiManager manager = myNavigationElement.getManager(); - PsiType type = guard.doPreventingRecursion(this, true, new Computable() { + PsiType type = RecursionManager.doPreventingRecursion(this, true, new Computable() { @Override public PsiType compute() { PsiType res = null; diff --git a/xml/impl/src/com/intellij/xml/util/XmlUtil.java b/xml/impl/src/com/intellij/xml/util/XmlUtil.java index 790d6e5c37a4..e37d365698e4 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlUtil.java +++ b/xml/impl/src/com/intellij/xml/util/XmlUtil.java @@ -668,7 +668,7 @@ public class XmlUtil { final PsiElement[] inclusion = CachedValuesManager.getManager(xincludeTag.getProject()).getCachedValue(xincludeTag, new CachedValueProvider() { public Result compute() { - return RecursionManager.createGuard("xinclude").doPreventingRecursion(xincludeTag, true, new Computable>() { + return RecursionManager.doPreventingRecursion(xincludeTag, true, new Computable>() { @Override public Result compute() { return computeInclusion(xincludeTag);