diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java index 2e72c287af98..a4f3c7ba8207 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/GrClassImplUtil.java @@ -17,10 +17,10 @@ package org.jetbrains.plugins.groovy.lang.psi.util; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.RecursionManager; +import com.intellij.openapi.util.Trinity; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.impl.PsiClassImplUtil; @@ -418,9 +418,11 @@ public class GrClassImplUtil { return Arrays.asList(grType.getCodeInnerClasses()); } - List classes = RecursionManager.doPreventingRecursion(grType, false, () -> { + boolean includeSynthetic = !PsiTreeUtil.isContextAncestor(grType, place, true); + Object key = Trinity.create(grType, lastParent, place); + List classes = RecursionManager.doPreventingRecursion(key, false, () -> { List result = new ArrayList(); - for (CandidateInfo info : CollectClassMembersUtil.getAllInnerClasses(grType, true).values()) { + for (CandidateInfo info : CollectClassMembersUtil.getAllInnerClasses(grType, includeSynthetic).values()) { final PsiClass inner = (PsiClass)info.getElement(); final PsiClass containingClass = inner.getContainingClass(); assert containingClass != null;