[Analysis API] add KtScope.getCallableSymbols/getClassifier symbols overloads which accept a candidate name set

This is needed for the cases when a candidate name set is known
 to avoid retrieving a set with all possible names when processing the scope.

^KT-58653 fixed
This commit is contained in:
Ilya Kirillov
2023-05-12 11:05:15 +02:00
committed by Space Team
parent aacdfb67c6
commit 29be88e3c9
12 changed files with 154 additions and 9 deletions
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.analysis.api.impl.base.scopes
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.name.Name
class KtCompositeScope(
@@ -46,12 +46,26 @@ class KtCompositeScope(
}
}
override fun getCallableSymbols(names: Collection<Name>): Sequence<KtCallableSymbol> = withValidityAssertion {
if (names.isEmpty()) return emptySequence()
sequence {
subScopes.forEach { yieldAll(it.getCallableSymbols(names)) }
}
}
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
sequence {
subScopes.forEach { yieldAll(it.getClassifierSymbols(nameFilter)) }
}
}
override fun getClassifierSymbols(names: Collection<Name>): Sequence<KtClassifierSymbol> = withValidityAssertion {
if (names.isEmpty()) return emptySequence()
sequence {
subScopes.forEach { yieldAll(it.getClassifierSymbols(names)) }
}
}
override fun getConstructors(): Sequence<KtConstructorSymbol> = withValidityAssertion {
sequence {
subScopes.forEach { yieldAll(it.getConstructors()) }
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.analysis.api.impl.base.scopes
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.name.Name
class KtEmptyScope(override val token: KtLifetimeToken) : KtScope {
@@ -33,10 +33,18 @@ class KtEmptyScope(override val token: KtLifetimeToken) : KtScope {
return emptySequence()
}
override fun getCallableSymbols(names: Collection<Name>): Sequence<KtCallableSymbol> = withValidityAssertion {
return emptySequence()
}
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
return emptySequence()
}
override fun getClassifierSymbols(names: Collection<Name>): Sequence<KtClassifierSymbol> = withValidityAssertion {
return emptySequence()
}
override fun getConstructors(): Sequence<KtConstructorSymbol> = withValidityAssertion {
return emptySequence()
}