DeclarationProvider.getAllDeclarations() -> getDeclarations(kindFilter, nameFilter)

This commit is contained in:
Valentin Kipyatkov
2014-10-31 21:51:20 +03:00
parent 169b082fff
commit c7ba03f76a
5 changed files with 34 additions and 13 deletions
@@ -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<JetDeclaration> = index().allDeclarations
override fun getDeclarations(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): List<JetDeclaration>
= index().allDeclarations
override fun getFunctionDeclarations(name: Name): List<JetNamedFunction>
= index().functions[ResolveSessionUtils.safeNameForLazyResolve(name)].toList()
@@ -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<JetDeclaration>
public fun getDeclarations(kindFilter: (JetScope.DescriptorKind) -> Boolean, nameFilter: (Name) -> Boolean): List<JetDeclaration>
public fun getFunctionDeclarations(name: Name): Collection<JetNamedFunction>
@@ -120,23 +120,38 @@ public abstract class AbstractLazyMemberScope<D : DeclarationDescriptor, DP : De
protected fun computeDescriptorsFromDeclaredElements(kindFilter: (JetScope.DescriptorKind) -> Boolean,
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val declarations = declarationProvider.getAllDeclarations()
val declarations = declarationProvider.getDeclarations(kindFilter, nameFilter)
val result = ArrayList<DeclarationDescriptor>(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.