diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt index 038cc6e7d2d..679a583c5bb 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -45,7 +45,14 @@ public abstract class LazyJavaMemberScope( protected val c: LazyJavaResolverContextWithTypes, private val _containingDeclaration: DeclarationDescriptor ) : JetScope { - private val allDescriptors: NotNullLazyValue> = c.storageManager.createLazyValue{computeAllDescriptors()} + private val allDescriptors = c.storageManager.createRecursionTolerantLazyValue>( + {computeAllDescriptors()}, + // This is to avoid the following recursive case: + // when computing getAllPackageNames() we ask the JavaPsiFacade for all subpackages of foo + // it, in turn, asks JavaElementFinder for subpackages of Kotlin package foo, which calls getAllPackageNames() recursively + // when on recursive call we return an empty collection, recursion collapses gracefully + Collections.emptyList() + ) override fun getContainingDeclaration() = _containingDeclaration