[Analysis API FIR] refactoring, remove duplicated code from KtFir(Non)StarImporting scope

use base class implementation instead.
This commit is contained in:
Ilya Kirillov
2023-05-12 14:17:50 +02:00
committed by Space Team
parent 55bbc5eb02
commit 950a32901c
3 changed files with 7 additions and 52 deletions
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal abstract class KtFirBasedScope<S : FirScope>( internal abstract class KtFirBasedScope<S : FirScope>(
protected val firScope: S, internal val firScope: S,
protected val builder: KtSymbolByFirBuilder, protected val builder: KtSymbolByFirBuilder,
) : KtScope { ) : KtScope {
final override val token: KtLifetimeToken get() = builder.token final override val token: KtLifetimeToken get() = builder.token
@@ -7,12 +7,8 @@ package org.jetbrains.kotlin.analysis.api.fir.scopes
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion 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.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
@@ -21,10 +17,9 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal class KtFirNonStarImportingScope( internal class KtFirNonStarImportingScope(
private val firScope: FirAbstractSimpleImportingScope, firScope: FirAbstractSimpleImportingScope,
private val builder: KtSymbolByFirBuilder, builder: KtSymbolByFirBuilder,
) : KtScope { ) : KtFirBasedScope<FirAbstractSimpleImportingScope>(firScope, builder) {
override val token: KtLifetimeToken get() = builder.token
private val imports: List<NonStarImport> by cached { private val imports: List<NonStarImport> by cached {
buildList { buildList {
@@ -47,22 +42,6 @@ internal class KtFirNonStarImportingScope(
} }
} }
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
firScope.getCallableSymbols(getPossibleCallableNames().filter(nameFilter), builder)
}
override fun getCallableSymbols(names: Collection<Name>): Sequence<KtCallableSymbol> = withValidityAssertion {
firScope.getCallableSymbols(names, builder)
}
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
firScope.getClassifierSymbols(getPossibleClassifierNames().filter(nameFilter), builder)
}
override fun getClassifierSymbols(names: Collection<Name>): Sequence<KtClassifierSymbol> = withValidityAssertion {
firScope.getClassifierSymbols(names, builder)
}
override fun getPackageSymbols(nameFilter: KtScopeNameFilter): Sequence<KtPackageSymbol> = withValidityAssertion { override fun getPackageSymbols(nameFilter: KtScopeNameFilter): Sequence<KtPackageSymbol> = withValidityAssertion {
emptySequence() emptySequence()
} }
@@ -7,12 +7,8 @@ package org.jetbrains.kotlin.analysis.api.fir.scopes
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion 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.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
@@ -20,11 +16,10 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
internal class KtFirStarImportingScope( internal class KtFirStarImportingScope(
private val firScope: FirAbstractStarImportingScope, firScope: FirAbstractStarImportingScope,
private val builder: KtSymbolByFirBuilder, builder: KtSymbolByFirBuilder,
private val declarationProvider: KotlinDeclarationProvider, private val declarationProvider: KotlinDeclarationProvider,
) : KtScope { ) : KtFirBasedScope<FirAbstractStarImportingScope>(firScope, builder) {
override val token: KtLifetimeToken get() = builder.token
private val imports: List<StarImport> by cached { private val imports: List<StarImport> by cached {
firScope.starImports.map { import -> firScope.starImports.map { import ->
@@ -36,22 +31,6 @@ internal class KtFirStarImportingScope(
} }
} }
override fun getCallableSymbols(nameFilter: KtScopeNameFilter): Sequence<KtCallableSymbol> = withValidityAssertion {
firScope.getCallableSymbols(getPossibleCallableNames().filter(nameFilter), builder)
}
override fun getCallableSymbols(names: Collection<Name>): Sequence<KtCallableSymbol> = withValidityAssertion {
firScope.getCallableSymbols(names, builder)
}
override fun getClassifierSymbols(nameFilter: KtScopeNameFilter): Sequence<KtClassifierSymbol> = withValidityAssertion {
firScope.getClassifierSymbols(getPossibleClassifierNames().filter(nameFilter), builder)
}
override fun getClassifierSymbols(names: Collection<Name>): Sequence<KtClassifierSymbol> = withValidityAssertion {
firScope.getClassifierSymbols(names, builder)
}
override fun getConstructors(): Sequence<KtConstructorSymbol> = withValidityAssertion { emptySequence() } override fun getConstructors(): Sequence<KtConstructorSymbol> = withValidityAssertion { emptySequence() }
// todo cache? // todo cache?
@@ -66,12 +45,10 @@ internal class KtFirStarImportingScope(
} }
} }
override fun getPackageSymbols(nameFilter: KtScopeNameFilter): Sequence<KtPackageSymbol> = withValidityAssertion { override fun getPackageSymbols(nameFilter: KtScopeNameFilter): Sequence<KtPackageSymbol> = withValidityAssertion {
emptySequence() emptySequence()
} }
override fun getPossibleClassifierNames(): Set<Name> = withValidityAssertion { override fun getPossibleClassifierNames(): Set<Name> = withValidityAssertion {
imports.flatMapTo(hashSetOf()) { import -> imports.flatMapTo(hashSetOf()) { import ->
if (import.relativeClassName == null) { if (import.relativeClassName == null) {
@@ -82,5 +59,4 @@ internal class KtFirStarImportingScope(
} }
} }
} }
} }