From c7ba03f76a9c2a3403045ea4675b277313b3b8ff Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 31 Oct 2014 21:51:20 +0300 Subject: [PATCH] DeclarationProvider.getAllDeclarations() -> getDeclarations(kindFilter, nameFilter) --- .../AbstractPsiBasedDeclarationProvider.kt | 4 ++- .../lazy/declarations/DeclarationProvider.kt | 5 ++-- .../descriptors/AbstractLazyMemberScope.kt | 27 ++++++++++++++----- ...ombinedPackageMemberDeclarationProvider.kt | 5 +++- ...ubBasedPackageMemberDeclarationProvider.kt | 6 ++--- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.kt index 2d038156012..a4a69102d30 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.kt @@ -28,6 +28,7 @@ import org.jetbrains.jet.storage.StorageManager import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils.safeNameForLazyResolve import java.util.ArrayList +import org.jetbrains.jet.lang.resolve.scopes.JetScope public abstract class AbstractPsiBasedDeclarationProvider(storageManager: StorageManager) : DeclarationProvider { @@ -72,7 +73,8 @@ public abstract class AbstractPsiBasedDeclarationProvider(storageManager: Storag protected abstract fun doCreateIndex(index: Index) - override fun getAllDeclarations(): List = index().allDeclarations + override fun getDeclarations(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): List + = index().allDeclarations override fun getFunctionDeclarations(name: Name): List = index().functions[ResolveSessionUtils.safeNameForLazyResolve(name)].toList() diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.kt index ebe311bdca0..e2c4c1995ea 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.kt @@ -16,15 +16,16 @@ package org.jetbrains.jet.lang.resolve.lazy.declarations -import org.jetbrains.annotations.ReadOnly import org.jetbrains.jet.lang.psi.JetDeclaration import org.jetbrains.jet.lang.psi.JetNamedFunction import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.lang.resolve.scopes.JetScope +import org.jetbrains.jet.lang.resolve.scopes.JetScope.DescriptorKind public trait DeclarationProvider { - public fun getAllDeclarations(): List + public fun getDeclarations(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): List public fun getFunctionDeclarations(name: Name): Collection diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.kt index 4cce2ee8a24..ab0a86eeb4e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.kt @@ -120,23 +120,38 @@ public abstract class AbstractLazyMemberScope Boolean, nameFilter: (Name) -> Boolean): Collection { - val declarations = declarationProvider.getAllDeclarations() + val declarations = declarationProvider.getDeclarations(kindFilter, nameFilter) val result = ArrayList(declarations.size()) for (declaration in declarations) { if (declaration is JetClassOrObject) { - result.addAll(classDescriptors(declaration.getNameAsSafeName())) + val name = declaration.getNameAsSafeName() + if (nameFilter(name)) { + result.addAll(classDescriptors(name)) + } } else if (declaration is JetFunction) { - result.addAll(getFunctions(declaration.getNameAsSafeName())) + val name = declaration.getNameAsSafeName() + if (nameFilter(name)) { + result.addAll(getFunctions(name)) + } } else if (declaration is JetProperty) { - result.addAll(getProperties(declaration.getNameAsSafeName())) + val name = declaration.getNameAsSafeName() + if (nameFilter(name)) { + result.addAll(getProperties(name)) + } } else if (declaration is JetParameter) { - result.addAll(getProperties(declaration.getNameAsSafeName())) + val name = declaration.getNameAsSafeName() + if (nameFilter(name)) { + result.addAll(getProperties(name)) + } } else if (declaration is JetScript) { - result.addAll(classDescriptors(ScriptNameUtil.classNameForScript(declaration).shortName())) + val name = ScriptNameUtil.classNameForScript(declaration).shortName() + if (nameFilter(name)) { + result.addAll(classDescriptors(name)) + } } else if (declaration is JetTypedef || declaration is JetMultiDeclaration) { // Do nothing for typedefs as they are not supported. diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt index 8e6b9151486..656d0591ac8 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/CombinedPackageMemberDeclarationProvider.kt @@ -18,13 +18,16 @@ package org.jetbrains.jet.plugin.stubindex.resolve import org.jetbrains.jet.lang.resolve.lazy.declarations.PackageMemberDeclarationProvider import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.lang.resolve.scopes.JetScope +import org.jetbrains.jet.lang.resolve.scopes.JetScope.DescriptorKind public class CombinedPackageMemberDeclarationProvider(val providers: Collection) : PackageMemberDeclarationProvider { override fun getAllDeclaredSubPackages() = providers.flatMap { it.getAllDeclaredSubPackages() } override fun getPackageFiles() = providers.flatMap { it.getPackageFiles() } - override fun getAllDeclarations() = providers.flatMap { it.getAllDeclarations() } + override fun getDeclarations(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean) + = providers.flatMap { it.getDeclarations(kindFilter, nameFilter) } override fun getFunctionDeclarations(name: Name) = providers.flatMap { it.getFunctionDeclarations(name) } diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt index a94fbfbd120..aa631c26f27 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt @@ -30,6 +30,7 @@ import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils +import org.jetbrains.jet.lang.resolve.scopes.JetScope public class StubBasedPackageMemberDeclarationProvider( private val fqName: FqName, @@ -37,9 +38,8 @@ public class StubBasedPackageMemberDeclarationProvider( private val searchScope: GlobalSearchScope ) : PackageMemberDeclarationProvider { - override fun getAllDeclarations(): List { - return TOP_LEVEL_DECLARATION_INDICES.flatMap { - index -> + override fun getDeclarations(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): List { + return TOP_LEVEL_DECLARATION_INDICES.flatMap { index -> val fqNames = index.getAllKeys(project).toSet().map { FqName(it) }.filter { !it.isRoot() && it.parent() == fqName } fqNames.flatMap { index.get(it.asString(), project, searchScope) } }