From e14529eff742ac6e4d074fd591a501e467079554 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sat, 1 Nov 2014 00:41:20 +0300 Subject: [PATCH] LazyImportScope to filter by name and kind filters --- .../jet/lang/resolve/lazy/LazyImportScope.kt | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.kt index c569108adaa..32bde3c6d78 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.kt @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.resolve.scopes.* import org.jetbrains.jet.utils.Printer import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver.LookupMode +import java.util.HashSet public class LazyImportScope(private val resolveSession: ResolveSession, private val containingDeclaration: PackageViewDescriptor, @@ -143,22 +144,6 @@ public class LazyImportScope(private val resolveSession: ResolveSession, } } - private fun collectFromImports(lookupMode: LookupMode, descriptorsSelector: JetScopeSelectorUtil.ScopeDescriptorSelector): Collection { - return resolveSession.getStorageManager().compute { - val descriptors = Sets.newHashSet() - for (directive in importsProvider.getAllImports()) { - if (directive == directiveUnderResolve) { - // This is the recursion in imports analysis - throw IllegalStateException("Recursion while resolving many imports: " + directive.getText()) - } - - descriptors.addAll(descriptorsSelector.get(getImportScope(directive, lookupMode))) - } - - descriptors - } - } - private fun getImportScope(directive: JetImportDirective, lookupMode: LookupMode) = importedScopesProvider(directive).scopeForMode(lookupMode) override fun getClassifier(name: Name) = selectFirstFromImports(name, LookupMode.ONLY_CLASSES, JetScopeSelectorUtil.CLASSIFIER_DESCRIPTOR_SCOPE_SELECTOR) @@ -173,8 +158,21 @@ public class LazyImportScope(private val resolveSession: ResolveSession, override fun getDeclarationsByLabel(labelName: Name): Collection = listOf() - override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, - nameFilter: (Name) -> Boolean) = collectFromImports(LookupMode.EVERYTHING, JetScopeSelectorUtil.ALL_DESCRIPTORS_SCOPE_SELECTOR) + override fun getDescriptors(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): Collection { + return resolveSession.getStorageManager().compute { + val descriptors = HashSet() + for (directive in importsProvider.getAllImports()) { + if (directive == directiveUnderResolve) { + // This is the recursion in imports analysis + throw IllegalStateException("Recursion while resolving many imports: " + directive.getText()) + } + + descriptors.addAll(getImportScope(directive, LookupMode.EVERYTHING).getDescriptors(kindFilter, nameFilter)) + } + + descriptors + } + } override fun getImplicitReceiversHierarchy() = listOf()