From fc98262caf478c5ccc25bcc6c71403eed2961dcc Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 1 Sep 2012 10:21:48 +0200 Subject: [PATCH] prevent SOE during groovy control flow building --- .../lang/psi/controlFlow/impl/ControlFlowBuilder.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java index 2839b171afe2..e67018a2484f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java @@ -16,7 +16,9 @@ package org.jetbrains.plugins.groovy.lang.psi.controlFlow.impl; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.NullableComputable; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.RecursionManager; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; @@ -380,7 +382,12 @@ public class ControlFlowBuilder extends GroovyRecursiveElementVisitor { addNodeAndCheckPending(throwInstruction); interruptFlow(); - final PsiType type = exception.getNominalType(); + final PsiType type = RecursionManager.doPreventingRecursion(exception, true, new NullableComputable() { + @Override + public PsiType compute() { + return exception.getNominalType(); + } + }); if (type != null) { ExceptionInfo info = findCatch(type); if (info != null) {