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 c889a77a13e7..9e12539374a2 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 @@ -373,21 +373,27 @@ public class GrClassImplUtil { return true; } - private static List getInnerClassesForResolve(GrTypeDefinition grType, PsiElement lastParent) { + private static List getInnerClassesForResolve(final GrTypeDefinition grType, PsiElement lastParent) { if (lastParent instanceof GrReferenceList) { return Arrays.asList(grType.getInnerClasses()); } - List result = new ArrayList(); - try { - for (CandidateInfo info : CollectClassMembersUtil.getAllInnerClasses(grType, false).values()) { - ContainerUtil.addIfNotNull(result, (PsiClass)info.getElement()); + + List classes = RecursionManager.doPreventingRecursion(grType, true, new Computable>() { + @Override + public List compute() { + List result = new ArrayList(); + for (CandidateInfo info : CollectClassMembersUtil.getAllInnerClasses(grType, false).values()) { + ContainerUtil.addIfNotNull(result, (PsiClass)info.getElement()); + } + return result; } + }); + + if (classes == null) { + return Arrays.asList(grType.getInnerClasses()); } - catch (StackOverflowError e) { - - throw new RuntimeException("lastParent=" + lastParent, e); - } - return result; + + return classes; } public static boolean isSameDeclaration(PsiElement place, PsiElement element) {