From 6257471e24def473cffc69ca338cc908e9726a68 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 28 Oct 2013 13:07:39 +0400 Subject: [PATCH] Prevent recursion on getting all subpackages --- .../resolve/java/lazy/descriptors/LazyJavaMemberScope.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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