FIR IDE: Add name filtering to scope KtScope and implementations
This commit is contained in:
committed by
Ilya Kirillov
parent
dc600e3caf
commit
75d8710bf6
@@ -27,14 +27,16 @@ interface KtScope : ValidityTokenOwner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCallableSymbols(): Sequence<KtCallableSymbol>
|
fun getCallableSymbols(nameFilter: KtScopeNameFilter = { true }): Sequence<KtCallableSymbol>
|
||||||
fun getClassifierSymbols(): Sequence<KtClassifierSymbol>
|
fun getClassifierSymbols(nameFilter: KtScopeNameFilter = { true }): Sequence<KtClassifierSymbol>
|
||||||
|
|
||||||
fun containsName(name: Name): Boolean = withValidityAssertion {
|
fun containsName(name: Name): Boolean = withValidityAssertion {
|
||||||
name in getCallableNames() || name in getClassifierNames()
|
name in getCallableNames() || name in getClassifierNames()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typealias KtScopeNameFilter = (Name) -> Boolean
|
||||||
|
|
||||||
interface KtCompositeScope : KtScope {
|
interface KtCompositeScope : KtScope {
|
||||||
val subScopes: List<KtScope>
|
val subScopes: List<KtScope>
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
@@ -47,15 +47,15 @@ class KtFirCompositeScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion {
|
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
|
||||||
sequence {
|
sequence {
|
||||||
subScopes.forEach { yieldAll(it.getCallableSymbols()) }
|
subScopes.forEach { yieldAll(it.getCallableSymbols(nameFilter)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
sequence {
|
sequence {
|
||||||
subScopes.forEach { yieldAll(it.getClassifierSymbols()) }
|
subScopes.forEach { yieldAll(it.getClassifierSymbols(nameFilter)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -14,8 +14,8 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -41,12 +41,12 @@ internal abstract class KtFirDelegatingScope<S>(
|
|||||||
firScope.getClassifierNames()
|
firScope.getClassifierNames()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion {
|
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
|
||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun containsName(name: Name): Boolean = withValidityAssertion {
|
override fun containsName(name: Name): Boolean = withValidityAssertion {
|
||||||
|
|||||||
+5
-5
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.NonStarImport
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.NonStarImport
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -43,12 +43,12 @@ internal class KtFirNonStarImportingScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion {
|
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
|
||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -12,8 +12,8 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
||||||
@@ -45,11 +45,11 @@ internal class KtFirPackageScope(
|
|||||||
.mapNotNullTo(hashSetOf()) { it.nameAsName }
|
.mapNotNullTo(hashSetOf()) { it.nameAsName }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion {
|
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
|
||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-8
@@ -16,11 +16,8 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
|||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.Import
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.*
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtStarImportingScope
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.StarImport
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
||||||
@@ -51,12 +48,12 @@ internal class KtFirStarImportingScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCallableSymbols(): Sequence<KtCallableSymbol> = withValidityAssertion {
|
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
|
||||||
firScope.getCallableSymbols(getCallableNames(), builder)
|
firScope.getCallableSymbols(getCallableNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassifierSymbols(): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
|
||||||
firScope.getClassifierSymbols(getClassifierNames(), builder)
|
firScope.getClassifierSymbols(getClassifierNames().filter(nameFilter), builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo cache?
|
// todo cache?
|
||||||
|
|||||||
Reference in New Issue
Block a user