[fir low level, refactoring] rename LLFirModuleResolveState -> LLFirResolveSession
This commit is contained in:
+18
-18
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbolProvider
|
|||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.threadLocal
|
import org.jetbrains.kotlin.analysis.api.fir.utils.threadLocal
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.components.KtAnalysisScopeProviderImpl
|
import org.jetbrains.kotlin.analysis.api.impl.base.components.KtAnalysisScopeProviderImpl
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -30,13 +30,13 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
internal class KtFirAnalysisSession
|
internal class KtFirAnalysisSession
|
||||||
private constructor(
|
private constructor(
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
val firResolveState: LLFirModuleResolveState,
|
val firResolveSession: LLFirResolveSession,
|
||||||
internal val firSymbolBuilder: KtSymbolByFirBuilder,
|
internal val firSymbolBuilder: KtSymbolByFirBuilder,
|
||||||
token: ValidityToken,
|
token: ValidityToken,
|
||||||
private val mode: AnalysisSessionMode,
|
private val mode: AnalysisSessionMode,
|
||||||
) : KtAnalysisSession(token) {
|
) : KtAnalysisSession(token) {
|
||||||
|
|
||||||
override val useSiteModule: KtModule get() = firResolveState.useSiteKtModule
|
override val useSiteModule: KtModule get() = firResolveSession.useSiteKtModule
|
||||||
|
|
||||||
private enum class AnalysisSessionMode {
|
private enum class AnalysisSessionMode {
|
||||||
REGULAR,
|
REGULAR,
|
||||||
@@ -55,19 +55,19 @@ private constructor(
|
|||||||
|
|
||||||
override val samResolverImpl = KtFirSamResolver(this, token)
|
override val samResolverImpl = KtFirSamResolver(this, token)
|
||||||
|
|
||||||
override val scopeProviderImpl by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveState, token) }
|
override val scopeProviderImpl by threadLocal { KtFirScopeProvider(this, firSymbolBuilder, project, firResolveSession, token) }
|
||||||
|
|
||||||
override val symbolProviderImpl =
|
override val symbolProviderImpl =
|
||||||
KtFirSymbolProvider(this, firResolveState.useSiteFirSession.symbolProvider, firResolveState, firSymbolBuilder, token)
|
KtFirSymbolProvider(this, firResolveSession.useSiteFirSession.symbolProvider, firResolveSession, firSymbolBuilder, token)
|
||||||
|
|
||||||
override val completionCandidateCheckerImpl = KtFirCompletionCandidateChecker(this, token)
|
override val completionCandidateCheckerImpl = KtFirCompletionCandidateChecker(this, token)
|
||||||
|
|
||||||
override val symbolDeclarationOverridesProviderImpl =
|
override val symbolDeclarationOverridesProviderImpl =
|
||||||
KtFirSymbolDeclarationOverridesProvider(this, token)
|
KtFirSymbolDeclarationOverridesProvider(this, token)
|
||||||
|
|
||||||
override val referenceShortenerImpl = KtFirReferenceShortener(this, token, firResolveState)
|
override val referenceShortenerImpl = KtFirReferenceShortener(this, token, firResolveSession)
|
||||||
|
|
||||||
override val importOptimizerImpl: KtImportOptimizer = KtFirImportOptimizer(token, firResolveState)
|
override val importOptimizerImpl: KtImportOptimizer = KtFirImportOptimizer(token, firResolveSession)
|
||||||
|
|
||||||
override val symbolDeclarationRendererProviderImpl: KtSymbolDeclarationRendererProvider =
|
override val symbolDeclarationRendererProviderImpl: KtSymbolDeclarationRendererProvider =
|
||||||
KtFirSymbolDeclarationRendererProvider(this, token)
|
KtFirSymbolDeclarationRendererProvider(this, token)
|
||||||
@@ -104,42 +104,42 @@ private constructor(
|
|||||||
}
|
}
|
||||||
require(!elementToReanalyze.isPhysical) { "Depended context should be build only for non-physical elements" }
|
require(!elementToReanalyze.isPhysical) { "Depended context should be build only for non-physical elements" }
|
||||||
|
|
||||||
val contextResolveState = LowLevelFirApiFacadeForResolveOnAir.getResolveStateForDependentCopy(
|
val contextFirResolveSession = LowLevelFirApiFacadeForResolveOnAir.getFirResolveSessionForDependentCopy(
|
||||||
originalState = firResolveState,
|
originalFirResolveSession = firResolveSession,
|
||||||
originalKtFile = originalKtFile,
|
originalKtFile = originalKtFile,
|
||||||
elementToAnalyze = elementToReanalyze
|
elementToAnalyze = elementToReanalyze
|
||||||
)
|
)
|
||||||
|
|
||||||
return KtFirAnalysisSession(
|
return KtFirAnalysisSession(
|
||||||
project,
|
project,
|
||||||
contextResolveState,
|
contextFirResolveSession,
|
||||||
firSymbolBuilder.createReadOnlyCopy(contextResolveState),
|
firSymbolBuilder.createReadOnlyCopy(contextFirResolveSession),
|
||||||
token,
|
token,
|
||||||
AnalysisSessionMode.DEPENDENT_COPY
|
AnalysisSessionMode.DEPENDENT_COPY
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val useSiteSession: FirSession get() = firResolveState.useSiteFirSession
|
val useSiteSession: FirSession get() = firResolveSession.useSiteFirSession
|
||||||
val firSymbolProvider: FirSymbolProvider get() = useSiteSession.symbolProvider
|
val firSymbolProvider: FirSymbolProvider get() = useSiteSession.symbolProvider
|
||||||
val targetPlatform: TargetPlatform get() = useSiteSession.moduleData.platform
|
val targetPlatform: TargetPlatform get() = useSiteSession.moduleData.platform
|
||||||
|
|
||||||
fun getScopeSessionFor(session: FirSession): ScopeSession = firResolveState.getScopeSessionFor(session)
|
fun getScopeSessionFor(session: FirSession): ScopeSession = firResolveSession.getScopeSessionFor(session)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@InvalidWayOfUsingAnalysisSession
|
@InvalidWayOfUsingAnalysisSession
|
||||||
internal fun createAnalysisSessionByResolveState(
|
internal fun createAnalysisSessionByFirResolveSession(
|
||||||
firResolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
token: ValidityToken,
|
token: ValidityToken,
|
||||||
): KtFirAnalysisSession {
|
): KtFirAnalysisSession {
|
||||||
val project = firResolveState.project
|
val project = firResolveSession.project
|
||||||
val firSymbolBuilder = KtSymbolByFirBuilder(
|
val firSymbolBuilder = KtSymbolByFirBuilder(
|
||||||
firResolveState,
|
firResolveSession,
|
||||||
project,
|
project,
|
||||||
token
|
token
|
||||||
)
|
)
|
||||||
return KtFirAnalysisSession(
|
return KtFirAnalysisSession(
|
||||||
project,
|
project,
|
||||||
firResolveState,
|
firResolveSession,
|
||||||
firSymbolBuilder,
|
firSymbolBuilder,
|
||||||
token,
|
token,
|
||||||
AnalysisSessionMode.REGULAR,
|
AnalysisSessionMode.REGULAR,
|
||||||
|
|||||||
+9
-10
@@ -8,34 +8,33 @@ package org.jetbrains.kotlin.analysis.api.fir
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirBackingFieldSymbol
|
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.CachingKtAnalysisSessionProvider
|
import org.jetbrains.kotlin.analysis.api.impl.base.CachingKtAnalysisSessionProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
|
|
||||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
class KtFirAnalysisSessionProvider(project: Project) : CachingKtAnalysisSessionProvider<LLFirModuleResolveState>(project) {
|
class KtFirAnalysisSessionProvider(project: Project) : CachingKtAnalysisSessionProvider<LLFirResolveSession>(project) {
|
||||||
override fun getResolveState(contextElement: KtElement): LLFirModuleResolveState {
|
override fun getFirResolveSession(contextElement: KtElement): LLFirResolveSession {
|
||||||
return contextElement.getResolveState()
|
return contextElement.getFirResolveSession()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getResolveState(contextSymbol: KtSymbol): LLFirModuleResolveState {
|
override fun getFirResolveSession(contextSymbol: KtSymbol): LLFirResolveSession {
|
||||||
return when (contextSymbol) {
|
return when (contextSymbol) {
|
||||||
is KtFirSymbol<*> -> contextSymbol.resolveState
|
is KtFirSymbol<*> -> contextSymbol.firResolveSession
|
||||||
else -> error("Invalid symbol ${contextSymbol::class}")
|
else -> error("Invalid symbol ${contextSymbol::class}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createAnalysisSession(
|
override fun createAnalysisSession(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
validityToken: ValidityToken,
|
validityToken: ValidityToken,
|
||||||
): KtAnalysisSession {
|
): KtAnalysisSession {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
return KtFirAnalysisSession.createAnalysisSessionByResolveState(resolveState, validityToken)
|
return KtFirAnalysisSession.createAnalysisSessionByFirResolveSession(firResolveSession, validityToken)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+31
-31
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.*
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
@@ -53,7 +53,7 @@ import kotlin.contracts.contract
|
|||||||
*/
|
*/
|
||||||
internal class KtSymbolByFirBuilder private constructor(
|
internal class KtSymbolByFirBuilder private constructor(
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
val withReadOnlyCaching: Boolean,
|
val withReadOnlyCaching: Boolean,
|
||||||
private val symbolsCache: BuilderCache<FirBasedSymbol<*>, KtSymbol>,
|
private val symbolsCache: BuilderCache<FirBasedSymbol<*>, KtSymbol>,
|
||||||
@@ -61,10 +61,10 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
private val filesCache: BuilderCache<FirFileSymbol, KtFileSymbol>,
|
private val filesCache: BuilderCache<FirFileSymbol, KtFileSymbol>,
|
||||||
private val backingFieldCache: BuilderCache<FirBackingFieldSymbol, KtBackingFieldSymbol>,
|
private val backingFieldCache: BuilderCache<FirBackingFieldSymbol, KtBackingFieldSymbol>,
|
||||||
) : ValidityTokenOwner {
|
) : ValidityTokenOwner {
|
||||||
private val resolveState by weakRef(resolveState)
|
private val firResolveSession by weakRef(firResolveSession)
|
||||||
|
|
||||||
private val firProvider get() = resolveState.useSiteFirSession.symbolProvider
|
private val firProvider get() = firResolveSession.useSiteFirSession.symbolProvider
|
||||||
val rootSession: FirSession = resolveState.useSiteFirSession
|
val rootSession: FirSession = firResolveSession.useSiteFirSession
|
||||||
|
|
||||||
val classifierBuilder = ClassifierSymbolBuilder()
|
val classifierBuilder = ClassifierSymbolBuilder()
|
||||||
val functionLikeBuilder = FunctionLikeSymbolBuilder()
|
val functionLikeBuilder = FunctionLikeSymbolBuilder()
|
||||||
@@ -74,13 +74,13 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
val typeBuilder = TypeBuilder()
|
val typeBuilder = TypeBuilder()
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
project: Project,
|
project: Project,
|
||||||
token: ValidityToken
|
token: ValidityToken
|
||||||
) : this(
|
) : this(
|
||||||
project = project,
|
project = project,
|
||||||
token = token,
|
token = token,
|
||||||
resolveState = resolveState,
|
firResolveSession = firResolveSession,
|
||||||
withReadOnlyCaching = false,
|
withReadOnlyCaching = false,
|
||||||
symbolsCache = BuilderCache(),
|
symbolsCache = BuilderCache(),
|
||||||
extensionReceiverSymbolsCache = BuilderCache(),
|
extensionReceiverSymbolsCache = BuilderCache(),
|
||||||
@@ -88,12 +88,12 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
filesCache = BuilderCache(),
|
filesCache = BuilderCache(),
|
||||||
)
|
)
|
||||||
|
|
||||||
fun createReadOnlyCopy(newResolveState: LLFirModuleResolveState): KtSymbolByFirBuilder {
|
fun createReadOnlyCopy(newFirResolveSession: LLFirResolveSession): KtSymbolByFirBuilder {
|
||||||
check(!withReadOnlyCaching) { "Cannot create readOnly KtSymbolByFirBuilder from a readonly one" }
|
check(!withReadOnlyCaching) { "Cannot create readOnly KtSymbolByFirBuilder from a readonly one" }
|
||||||
return KtSymbolByFirBuilder(
|
return KtSymbolByFirBuilder(
|
||||||
project,
|
project,
|
||||||
token = token,
|
token = token,
|
||||||
resolveState = newResolveState,
|
firResolveSession = newFirResolveSession,
|
||||||
withReadOnlyCaching = true,
|
withReadOnlyCaching = true,
|
||||||
symbolsCache = symbolsCache.createReadOnlyCopy(),
|
symbolsCache = symbolsCache.createReadOnlyCopy(),
|
||||||
extensionReceiverSymbolsCache = extensionReceiverSymbolsCache.createReadOnlyCopy(),
|
extensionReceiverSymbolsCache = extensionReceiverSymbolsCache.createReadOnlyCopy(),
|
||||||
@@ -118,9 +118,9 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun buildEnumEntrySymbol(firSymbol: FirEnumEntrySymbol) =
|
fun buildEnumEntrySymbol(firSymbol: FirEnumEntrySymbol) =
|
||||||
symbolsCache.cache(firSymbol) { KtFirEnumEntrySymbol(firSymbol, resolveState, token, this) }
|
symbolsCache.cache(firSymbol) { KtFirEnumEntrySymbol(firSymbol, firResolveSession, token, this) }
|
||||||
|
|
||||||
fun buildFileSymbol(firSymbol: FirFileSymbol) = filesCache.cache(firSymbol) { KtFirFileSymbol(firSymbol, resolveState, token) }
|
fun buildFileSymbol(firSymbol: FirFileSymbol) = filesCache.cache(firSymbol) { KtFirFileSymbol(firSymbol, firResolveSession, token) }
|
||||||
|
|
||||||
private val packageProvider = project.createPackageProvider(GlobalSearchScope.allScope(project))//todo scope
|
private val packageProvider = project.createPackageProvider(GlobalSearchScope.allScope(project))//todo scope
|
||||||
|
|
||||||
@@ -165,19 +165,19 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun buildNamedClassOrObjectSymbol(symbol: FirRegularClassSymbol): KtFirNamedClassOrObjectSymbol {
|
fun buildNamedClassOrObjectSymbol(symbol: FirRegularClassSymbol): KtFirNamedClassOrObjectSymbol {
|
||||||
return symbolsCache.cache(symbol) { KtFirNamedClassOrObjectSymbol(symbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(symbol) { KtFirNamedClassOrObjectSymbol(symbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildAnonymousObjectSymbol(symbol: FirAnonymousObjectSymbol): KtAnonymousObjectSymbol {
|
fun buildAnonymousObjectSymbol(symbol: FirAnonymousObjectSymbol): KtAnonymousObjectSymbol {
|
||||||
return symbolsCache.cache(symbol) { KtFirAnonymousObjectSymbol(symbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(symbol) { KtFirAnonymousObjectSymbol(symbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildTypeAliasSymbol(symbol: FirTypeAliasSymbol): KtFirTypeAliasSymbol {
|
fun buildTypeAliasSymbol(symbol: FirTypeAliasSymbol): KtFirTypeAliasSymbol {
|
||||||
return symbolsCache.cache(symbol) { KtFirTypeAliasSymbol(symbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(symbol) { KtFirTypeAliasSymbol(symbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildTypeParameterSymbol(firSymbol: FirTypeParameterSymbol): KtFirTypeParameterSymbol {
|
fun buildTypeParameterSymbol(firSymbol: FirTypeParameterSymbol): KtFirTypeParameterSymbol {
|
||||||
return symbolsCache.cache(firSymbol) { KtFirTypeParameterSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirTypeParameterSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildTypeParameterSymbolByLookupTag(lookupTag: ConeTypeParameterLookupTag): KtTypeParameterSymbol? {
|
fun buildTypeParameterSymbolByLookupTag(lookupTag: ConeTypeParameterLookupTag): KtTypeParameterSymbol? {
|
||||||
@@ -228,7 +228,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
check(firSymbol.origin != FirDeclarationOrigin.SamConstructor)
|
check(firSymbol.origin != FirDeclarationOrigin.SamConstructor)
|
||||||
return symbolsCache.cache(firSymbol) { KtFirFunctionSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirFunctionSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildFunctionSignature(firSymbol: FirNamedFunctionSymbol): KtFunctionLikeSignature<KtFirFunctionSymbol> {
|
fun buildFunctionSignature(firSymbol: FirNamedFunctionSymbol): KtFunctionLikeSignature<KtFirFunctionSymbol> {
|
||||||
@@ -249,27 +249,27 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun buildAnonymousFunctionSymbol(firSymbol: FirAnonymousFunctionSymbol): KtFirAnonymousFunctionSymbol {
|
fun buildAnonymousFunctionSymbol(firSymbol: FirAnonymousFunctionSymbol): KtFirAnonymousFunctionSymbol {
|
||||||
return symbolsCache.cache(firSymbol) { KtFirAnonymousFunctionSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirAnonymousFunctionSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildConstructorSymbol(firSymbol: FirConstructorSymbol): KtFirConstructorSymbol {
|
fun buildConstructorSymbol(firSymbol: FirConstructorSymbol): KtFirConstructorSymbol {
|
||||||
val originalFirSymbol = firSymbol.fir.originalConstructorIfTypeAlias?.symbol ?: firSymbol
|
val originalFirSymbol = firSymbol.fir.originalConstructorIfTypeAlias?.symbol ?: firSymbol
|
||||||
return symbolsCache.cache(originalFirSymbol) {
|
return symbolsCache.cache(originalFirSymbol) {
|
||||||
KtFirConstructorSymbol(originalFirSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirConstructorSymbol(originalFirSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildSamConstructorSymbol(firSymbol: FirNamedFunctionSymbol): KtFirSamConstructorSymbol {
|
fun buildSamConstructorSymbol(firSymbol: FirNamedFunctionSymbol): KtFirSamConstructorSymbol {
|
||||||
check(firSymbol.origin == FirDeclarationOrigin.SamConstructor)
|
check(firSymbol.origin == FirDeclarationOrigin.SamConstructor)
|
||||||
return symbolsCache.cache(firSymbol) { KtFirSamConstructorSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirSamConstructorSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildPropertyAccessorSymbol(firSymbol: FirPropertyAccessorSymbol): KtFunctionLikeSymbol {
|
fun buildPropertyAccessorSymbol(firSymbol: FirPropertyAccessorSymbol): KtFunctionLikeSymbol {
|
||||||
return symbolsCache.cache(firSymbol) {
|
return symbolsCache.cache(firSymbol) {
|
||||||
if (firSymbol.isGetter) {
|
if (firSymbol.isGetter) {
|
||||||
KtFirPropertyGetterSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirPropertyGetterSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
} else {
|
} else {
|
||||||
KtFirPropertySetterSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirPropertySetterSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -314,7 +314,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return symbolsCache.cache(firSymbol) {
|
return symbolsCache.cache(firSymbol) {
|
||||||
KtFirKotlinPropertySymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirKotlinPropertySymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,31 +330,31 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
fun buildLocalVariableSymbol(firSymbol: FirPropertySymbol): KtFirLocalVariableSymbol {
|
fun buildLocalVariableSymbol(firSymbol: FirPropertySymbol): KtFirLocalVariableSymbol {
|
||||||
checkRequirementForBuildingSymbol<KtFirLocalVariableSymbol>(firSymbol, firSymbol.isLocal)
|
checkRequirementForBuildingSymbol<KtFirLocalVariableSymbol>(firSymbol, firSymbol.isLocal)
|
||||||
return symbolsCache.cache(firSymbol) {
|
return symbolsCache.cache(firSymbol) {
|
||||||
KtFirLocalVariableSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirLocalVariableSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildSyntheticJavaPropertySymbol(firSymbol: FirSyntheticPropertySymbol): KtFirSyntheticJavaPropertySymbol {
|
fun buildSyntheticJavaPropertySymbol(firSymbol: FirSyntheticPropertySymbol): KtFirSyntheticJavaPropertySymbol {
|
||||||
return symbolsCache.cache(firSymbol) {
|
return symbolsCache.cache(firSymbol) {
|
||||||
KtFirSyntheticJavaPropertySymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirSyntheticJavaPropertySymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildValueParameterSymbol(firSymbol: FirValueParameterSymbol): KtValueParameterSymbol {
|
fun buildValueParameterSymbol(firSymbol: FirValueParameterSymbol): KtValueParameterSymbol {
|
||||||
return symbolsCache.cache(firSymbol) {
|
return symbolsCache.cache(firSymbol) {
|
||||||
KtFirValueParameterSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirValueParameterSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun buildFieldSymbol(firSymbol: FirFieldSymbol): KtFirJavaFieldSymbol {
|
fun buildFieldSymbol(firSymbol: FirFieldSymbol): KtFirJavaFieldSymbol {
|
||||||
checkRequirementForBuildingSymbol<KtFirJavaFieldSymbol>(firSymbol, firSymbol.fir.isJavaFieldOrSubstitutionOverrideOfJavaField())
|
checkRequirementForBuildingSymbol<KtFirJavaFieldSymbol>(firSymbol, firSymbol.fir.isJavaFieldOrSubstitutionOverrideOfJavaField())
|
||||||
return symbolsCache.cache(firSymbol) { KtFirJavaFieldSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirJavaFieldSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildBackingFieldSymbol(firSymbol: FirBackingFieldSymbol): KtFirBackingFieldSymbol {
|
fun buildBackingFieldSymbol(firSymbol: FirBackingFieldSymbol): KtFirBackingFieldSymbol {
|
||||||
return backingFieldCache.cache(firSymbol) {
|
return backingFieldCache.cache(firSymbol) {
|
||||||
KtFirBackingFieldSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirBackingFieldSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,25 +400,25 @@ internal class KtSymbolByFirBuilder private constructor(
|
|||||||
|
|
||||||
fun buildGetterSymbol(firSymbol: FirPropertyAccessorSymbol): KtFirPropertyGetterSymbol {
|
fun buildGetterSymbol(firSymbol: FirPropertyAccessorSymbol): KtFirPropertyGetterSymbol {
|
||||||
checkRequirementForBuildingSymbol<KtFirPropertyGetterSymbol>(firSymbol, firSymbol.isGetter)
|
checkRequirementForBuildingSymbol<KtFirPropertyGetterSymbol>(firSymbol, firSymbol.isGetter)
|
||||||
return symbolsCache.cache(firSymbol) { KtFirPropertyGetterSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirPropertyGetterSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildSetterSymbol(firSymbol: FirPropertyAccessorSymbol): KtFirPropertySetterSymbol {
|
fun buildSetterSymbol(firSymbol: FirPropertyAccessorSymbol): KtFirPropertySetterSymbol {
|
||||||
checkRequirementForBuildingSymbol<KtFirPropertySetterSymbol>(firSymbol, firSymbol.isSetter)
|
checkRequirementForBuildingSymbol<KtFirPropertySetterSymbol>(firSymbol, firSymbol.isSetter)
|
||||||
return symbolsCache.cache(firSymbol) { KtFirPropertySetterSymbol(firSymbol, resolveState, token, this@KtSymbolByFirBuilder) }
|
return symbolsCache.cache(firSymbol) { KtFirPropertySetterSymbol(firSymbol, firResolveSession, token, this@KtSymbolByFirBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildExtensionReceiverSymbol(firCallableSymbol: FirCallableSymbol<*>): KtReceiverParameterSymbol? {
|
fun buildExtensionReceiverSymbol(firCallableSymbol: FirCallableSymbol<*>): KtReceiverParameterSymbol? {
|
||||||
if (firCallableSymbol.fir.receiverTypeRef == null) return null
|
if (firCallableSymbol.fir.receiverTypeRef == null) return null
|
||||||
return extensionReceiverSymbolsCache.cache(firCallableSymbol) {
|
return extensionReceiverSymbolsCache.cache(firCallableSymbol) {
|
||||||
KtFirReceiverParameterSymbol(firCallableSymbol, resolveState, token, this@KtSymbolByFirBuilder)
|
KtFirReceiverParameterSymbol(firCallableSymbol, firResolveSession, token, this@KtSymbolByFirBuilder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class AnonymousInitializerBuilder {
|
inner class AnonymousInitializerBuilder {
|
||||||
fun buildClassInitializer(firSymbol: FirAnonymousInitializerSymbol): KtClassInitializerSymbol {
|
fun buildClassInitializer(firSymbol: FirAnonymousInitializerSymbol): KtClassInitializerSymbol {
|
||||||
return symbolsCache.cache(firSymbol) { KtFirClassInitializerSymbol(firSymbol, resolveState, token) }
|
return symbolsCache.cache(firSymbol) { KtFirClassInitializerSymbol(firSymbol, firResolveSession, token) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -39,10 +39,10 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
internal interface KtFirAnalysisSessionComponent {
|
internal interface KtFirAnalysisSessionComponent {
|
||||||
val analysisSession: KtFirAnalysisSession
|
val analysisSession: KtFirAnalysisSession
|
||||||
|
|
||||||
val rootModuleSession: FirSession get() = analysisSession.firResolveState.useSiteFirSession
|
val rootModuleSession: FirSession get() = analysisSession.firResolveSession.useSiteFirSession
|
||||||
val typeContext: ConeInferenceContext get() = rootModuleSession.typeContext
|
val typeContext: ConeInferenceContext get() = rootModuleSession.typeContext
|
||||||
val firSymbolBuilder get() = analysisSession.firSymbolBuilder
|
val firSymbolBuilder get() = analysisSession.firSymbolBuilder
|
||||||
val firResolveState get() = analysisSession.firResolveState
|
val firResolveSession get() = analysisSession.firResolveSession
|
||||||
|
|
||||||
fun ConeKotlinType.asKtType() = analysisSession.firSymbolBuilder.typeBuilder.buildKtType(this)
|
fun ConeKotlinType.asKtType() = analysisSession.firSymbolBuilder.typeBuilder.buildKtType(this)
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ internal interface KtFirAnalysisSessionComponent {
|
|||||||
|
|
||||||
fun createTypeCheckerContext(): TypeCheckerState {
|
fun createTypeCheckerContext(): TypeCheckerState {
|
||||||
// TODO use correct session here,
|
// TODO use correct session here,
|
||||||
return analysisSession.firResolveState.useSiteFirSession.typeContext.newTypeCheckerState(
|
return analysisSession.firResolveSession.useSiteFirSession.typeContext.newTypeCheckerState(
|
||||||
errorTypesEqualToAnything = true,
|
errorTypesEqualToAnything = true,
|
||||||
stubTypesEqualToAnything = true
|
stubTypesEqualToAnything = true
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -110,7 +110,7 @@ internal class KtFirCallResolver(
|
|||||||
?: containingBinaryExpressionForLhs
|
?: containingBinaryExpressionForLhs
|
||||||
?: containingUnaryExpressionForIncOrDec
|
?: containingUnaryExpressionForIncOrDec
|
||||||
?: psi
|
?: psi
|
||||||
val fir = psiToResolve.getOrBuildFir(analysisSession.firResolveState) ?: return emptyList()
|
val fir = psiToResolve.getOrBuildFir(analysisSession.firResolveSession) ?: return emptyList()
|
||||||
return fir.getCallInfo(
|
return fir.getCallInfo(
|
||||||
psiToResolve,
|
psiToResolve,
|
||||||
psiToResolve == containingCallExpressionForCalleeExpression,
|
psiToResolve == containingCallExpressionForCalleeExpression,
|
||||||
@@ -225,7 +225,7 @@ internal class KtFirCallResolver(
|
|||||||
val lhs = deparenthesize(this)
|
val lhs = deparenthesize(this)
|
||||||
val binaryExpression = parentOfType<KtBinaryExpression>() ?: return null
|
val binaryExpression = parentOfType<KtBinaryExpression>() ?: return null
|
||||||
if (deparenthesize(binaryExpression.left) != lhs || binaryExpression.operationToken !in KtTokens.ALL_ASSIGNMENTS) return null
|
if (deparenthesize(binaryExpression.left) != lhs || binaryExpression.operationToken !in KtTokens.ALL_ASSIGNMENTS) return null
|
||||||
val firBinaryExpression = binaryExpression.getOrBuildFir(analysisSession.firResolveState)
|
val firBinaryExpression = binaryExpression.getOrBuildFir(analysisSession.firResolveSession)
|
||||||
if (firBinaryExpression is FirFunctionCall) {
|
if (firBinaryExpression is FirFunctionCall) {
|
||||||
if (firBinaryExpression.origin == FirFunctionCallOrigin.Operator &&
|
if (firBinaryExpression.origin == FirFunctionCallOrigin.Operator &&
|
||||||
firBinaryExpression.calleeReference.name in OperatorNameConventions.ASSIGNMENT_OPERATIONS
|
firBinaryExpression.calleeReference.name in OperatorNameConventions.ASSIGNMENT_OPERATIONS
|
||||||
@@ -772,7 +772,7 @@ internal class KtFirCallResolver(
|
|||||||
|
|
||||||
val calleeName = originalFunctionCall.calleeOrCandidateName ?: return emptyList()
|
val calleeName = originalFunctionCall.calleeOrCandidateName ?: return emptyList()
|
||||||
val candidates = AllCandidatesResolver(analysisSession.useSiteSession).getAllCandidates(
|
val candidates = AllCandidatesResolver(analysisSession.useSiteSession).getAllCandidates(
|
||||||
analysisSession.firResolveState,
|
analysisSession.firResolveSession,
|
||||||
originalFunctionCall,
|
originalFunctionCall,
|
||||||
calleeName,
|
calleeName,
|
||||||
psi
|
psi
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ internal class KtFirCompileTimeConstantProvider(
|
|||||||
expression: KtExpression,
|
expression: KtExpression,
|
||||||
mode: KtConstantEvaluationMode,
|
mode: KtConstantEvaluationMode,
|
||||||
): KtConstantValue? = withValidityAssertion {
|
): KtConstantValue? = withValidityAssertion {
|
||||||
evaluateFir(expression.getOrBuildFir(firResolveState), expression, mode)
|
evaluateFir(expression.getOrBuildFir(firResolveSession), expression, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun evaluateFir(
|
private fun evaluateFir(
|
||||||
|
|||||||
+5
-5
@@ -60,9 +60,9 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
nameExpression: KtSimpleNameExpression,
|
nameExpression: KtSimpleNameExpression,
|
||||||
possibleExplicitReceiver: KtExpression?,
|
possibleExplicitReceiver: KtExpression?,
|
||||||
): KtExtensionApplicabilityResult {
|
): KtExtensionApplicabilityResult {
|
||||||
val file = originalFile.getOrBuildFirFile(firResolveState)
|
val file = originalFile.getOrBuildFirFile(firResolveSession)
|
||||||
val explicitReceiverExpression = possibleExplicitReceiver?.getMatchingFirExpressionForCallReceiver()
|
val explicitReceiverExpression = possibleExplicitReceiver?.getMatchingFirExpressionForCallReceiver()
|
||||||
val resolver = SingleCandidateResolver(firResolveState.useSiteFirSession, file)
|
val resolver = SingleCandidateResolver(firResolveSession.useSiteFirSession, file)
|
||||||
val implicitReceivers = getImplicitReceivers(originalFile, nameExpression)
|
val implicitReceivers = getImplicitReceivers(originalFile, nameExpression)
|
||||||
for (implicitReceiverValue in implicitReceivers) {
|
for (implicitReceiverValue in implicitReceivers) {
|
||||||
val resolutionParameters = ResolutionParameters(
|
val resolutionParameters = ResolutionParameters(
|
||||||
@@ -90,7 +90,7 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
originalFile: KtFile,
|
originalFile: KtFile,
|
||||||
fakeNameExpression: KtSimpleNameExpression
|
fakeNameExpression: KtSimpleNameExpression
|
||||||
): Sequence<ImplicitReceiverValue<*>?> {
|
): Sequence<ImplicitReceiverValue<*>?> {
|
||||||
val towerDataContext = analysisSession.firResolveState.getTowerContextProvider(originalFile)
|
val towerDataContext = analysisSession.firResolveSession.getTowerContextProvider(originalFile)
|
||||||
.getClosestAvailableParentContext(fakeNameExpression)
|
.getClosestAvailableParentContext(fakeNameExpression)
|
||||||
?: error("Cannot find enclosing declaration for ${fakeNameExpression.getElementTextInContext()}")
|
?: error("Cannot find enclosing declaration for ${fakeNameExpression.getElementTextInContext()}")
|
||||||
|
|
||||||
@@ -110,9 +110,9 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
*/
|
*/
|
||||||
private fun KtExpression.getMatchingFirExpressionForCallReceiver(): FirExpression {
|
private fun KtExpression.getMatchingFirExpressionForCallReceiver(): FirExpression {
|
||||||
val psiWholeCall = this.getQualifiedExpressionForReceiver()
|
val psiWholeCall = this.getQualifiedExpressionForReceiver()
|
||||||
if (psiWholeCall !is KtSafeQualifiedExpression) return this.getOrBuildFirOfType<FirExpression>(firResolveState)
|
if (psiWholeCall !is KtSafeQualifiedExpression) return this.getOrBuildFirOfType<FirExpression>(firResolveSession)
|
||||||
|
|
||||||
val firSafeCall = psiWholeCall.getOrBuildFirOfType<FirSafeCallExpression>(firResolveState)
|
val firSafeCall = psiWholeCall.getOrBuildFirOfType<FirSafeCallExpression>(firResolveSession)
|
||||||
return firSafeCall.checkedSubjectRef.value
|
return firSafeCall.checkedSubjectRef.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -26,11 +26,11 @@ internal class KtFirDiagnosticProvider(
|
|||||||
element: KtElement,
|
element: KtElement,
|
||||||
filter: KtDiagnosticCheckerFilter
|
filter: KtDiagnosticCheckerFilter
|
||||||
): Collection<KtDiagnosticWithPsi<*>> = withValidityAssertion {
|
): Collection<KtDiagnosticWithPsi<*>> = withValidityAssertion {
|
||||||
element.getDiagnostics(firResolveState, filter.asLLFilter()).map { it.asKtDiagnostic() }
|
element.getDiagnostics(firResolveSession, filter.asLLFilter()).map { it.asKtDiagnostic() }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun collectDiagnosticsForFile(ktFile: KtFile, filter: KtDiagnosticCheckerFilter): Collection<KtDiagnosticWithPsi<*>> =
|
override fun collectDiagnosticsForFile(ktFile: KtFile, filter: KtDiagnosticCheckerFilter): Collection<KtDiagnosticWithPsi<*>> =
|
||||||
ktFile.collectDiagnosticsForFile(firResolveState, filter.asLLFilter()).map { it.asKtDiagnostic() }
|
ktFile.collectDiagnosticsForFile(firResolveSession, filter.asLLFilter()).map { it.asKtDiagnostic() }
|
||||||
|
|
||||||
|
|
||||||
private fun KtDiagnosticCheckerFilter.asLLFilter() = when (this) {
|
private fun KtDiagnosticCheckerFilter.asLLFilter() = when (this) {
|
||||||
|
|||||||
+3
-3
@@ -23,14 +23,14 @@ internal class KtFirExpressionInfoProvider(
|
|||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtExpressionInfoProvider(), KtFirAnalysisSessionComponent {
|
) : KtExpressionInfoProvider(), KtFirAnalysisSessionComponent {
|
||||||
override fun getReturnExpressionTargetSymbol(returnExpression: KtReturnExpression): KtCallableSymbol? {
|
override fun getReturnExpressionTargetSymbol(returnExpression: KtReturnExpression): KtCallableSymbol? {
|
||||||
val fir = returnExpression.getOrBuildFirSafe<FirReturnExpression>(firResolveState) ?: return null
|
val fir = returnExpression.getOrBuildFirSafe<FirReturnExpression>(firResolveSession) ?: return null
|
||||||
val firTargetSymbol = fir.target.labeledElement
|
val firTargetSymbol = fir.target.labeledElement
|
||||||
if (firTargetSymbol is FirErrorFunction) return null
|
if (firTargetSymbol is FirErrorFunction) return null
|
||||||
return firSymbolBuilder.callableBuilder.buildCallableSymbol(firTargetSymbol.symbol)
|
return firSymbolBuilder.callableBuilder.buildCallableSymbol(firTargetSymbol.symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getWhenMissingCases(whenExpression: KtWhenExpression): List<WhenMissingCase> {
|
override fun getWhenMissingCases(whenExpression: KtWhenExpression): List<WhenMissingCase> {
|
||||||
val firWhenExpression = whenExpression.getOrBuildFirSafe<FirWhenExpression>(analysisSession.firResolveState) ?: return emptyList()
|
val firWhenExpression = whenExpression.getOrBuildFirSafe<FirWhenExpression>(analysisSession.firResolveSession) ?: return emptyList()
|
||||||
return FirWhenExhaustivenessTransformer.computeAllMissingCases(analysisSession.firResolveState.useSiteFirSession, firWhenExpression)
|
return FirWhenExhaustivenessTransformer.computeAllMissingCases(analysisSession.firResolveSession.useSiteFirSession, firWhenExpression)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+6
-6
@@ -38,7 +38,7 @@ internal class KtFirExpressionTypeProvider(
|
|||||||
) : KtExpressionTypeProvider(), KtFirAnalysisSessionComponent {
|
) : KtExpressionTypeProvider(), KtFirAnalysisSessionComponent {
|
||||||
|
|
||||||
override fun getKtExpressionType(expression: KtExpression): KtType? = withValidityAssertion {
|
override fun getKtExpressionType(expression: KtExpression): KtType? = withValidityAssertion {
|
||||||
when (val fir = expression.unwrap().getOrBuildFir(firResolveState)) {
|
when (val fir = expression.unwrap().getOrBuildFir(firResolveSession)) {
|
||||||
is FirFunctionCall -> {
|
is FirFunctionCall -> {
|
||||||
getReturnTypeForArrayStyleAssignmentTarget(expression, fir)
|
getReturnTypeForArrayStyleAssignmentTarget(expression, fir)
|
||||||
?: fir.typeRef.coneType.asKtType()
|
?: fir.typeRef.coneType.asKtType()
|
||||||
@@ -95,12 +95,12 @@ internal class KtFirExpressionTypeProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getReturnTypeForKtDeclaration(declaration: KtDeclaration): KtType = withValidityAssertion {
|
override fun getReturnTypeForKtDeclaration(declaration: KtDeclaration): KtType = withValidityAssertion {
|
||||||
val firDeclaration = declaration.getOrBuildFirOfType<FirCallableDeclaration>(firResolveState)
|
val firDeclaration = declaration.getOrBuildFirOfType<FirCallableDeclaration>(firResolveSession)
|
||||||
firDeclaration.returnTypeRef.coneType.asKtType()
|
firDeclaration.returnTypeRef.coneType.asKtType()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFunctionalTypeForKtFunction(declaration: KtFunction): KtType = withValidityAssertion {
|
override fun getFunctionalTypeForKtFunction(declaration: KtFunction): KtType = withValidityAssertion {
|
||||||
val firFunction = declaration.getOrBuildFirOfType<FirFunction>(firResolveState)
|
val firFunction = declaration.getOrBuildFirOfType<FirFunction>(firResolveSession)
|
||||||
firFunction.constructFunctionalType(firFunction.isSuspend).asKtType()
|
firFunction.constructFunctionalType(firFunction.isSuspend).asKtType()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ internal class KtFirExpressionTypeProvider(
|
|||||||
|
|
||||||
private fun getExpectedTypeOfFunctionParameter(expression: PsiElement): KtType? {
|
private fun getExpectedTypeOfFunctionParameter(expression: PsiElement): KtType? {
|
||||||
val (ktCallExpression, argumentExpression) = expression.getFunctionCallAsWithThisAsParameter() ?: return null
|
val (ktCallExpression, argumentExpression) = expression.getFunctionCallAsWithThisAsParameter() ?: return null
|
||||||
val firCall = ktCallExpression.getOrBuildFirSafe<FirFunctionCall>(firResolveState) ?: return null
|
val firCall = ktCallExpression.getOrBuildFirSafe<FirFunctionCall>(firResolveSession) ?: return null
|
||||||
|
|
||||||
val callee = (firCall.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol
|
val callee = (firCall.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol
|
||||||
if (callee?.fir?.origin == FirDeclarationOrigin.SamConstructor) {
|
if (callee?.fir?.origin == FirDeclarationOrigin.SamConstructor) {
|
||||||
@@ -161,7 +161,7 @@ internal class KtFirExpressionTypeProvider(
|
|||||||
private fun getExpectedTypeOfInfixFunctionParameter(expression: PsiElement): KtType? {
|
private fun getExpectedTypeOfInfixFunctionParameter(expression: PsiElement): KtType? {
|
||||||
val infixCallExpression =
|
val infixCallExpression =
|
||||||
expression.unwrapQualified<KtBinaryExpression> { binaryExpr, expr -> binaryExpr.right == expr } ?: return null
|
expression.unwrapQualified<KtBinaryExpression> { binaryExpr, expr -> binaryExpr.right == expr } ?: return null
|
||||||
val firCall = infixCallExpression.getOrBuildFirSafe<FirFunctionCall>(firResolveState) ?: return null
|
val firCall = infixCallExpression.getOrBuildFirSafe<FirFunctionCall>(firResolveSession) ?: return null
|
||||||
|
|
||||||
// There is only one parameter for infix functions; get its type
|
// There is only one parameter for infix functions; get its type
|
||||||
val arguments = firCall.argumentMapping ?: return null
|
val arguments = firCall.argumentMapping ?: return null
|
||||||
@@ -229,7 +229,7 @@ internal class KtFirExpressionTypeProvider(
|
|||||||
!typeRef.coneType.isNullableType()
|
!typeRef.coneType.isNullableType()
|
||||||
}
|
}
|
||||||
|
|
||||||
when (val fir = expression.getOrBuildFir(analysisSession.firResolveState)) {
|
when (val fir = expression.getOrBuildFir(analysisSession.firResolveSession)) {
|
||||||
is FirExpressionWithSmartcastToNull -> if (fir.isStable) {
|
is FirExpressionWithSmartcastToNull -> if (fir.isStable) {
|
||||||
return DefiniteNullability.DEFINITELY_NULL
|
return DefiniteNullability.DEFINITELY_NULL
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.analysis.api.components.KtImportOptimizerResult
|
|||||||
import org.jetbrains.kotlin.analysis.api.fir.getCandidateSymbols
|
import org.jetbrains.kotlin.analysis.api.fir.getCandidateSymbols
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.computeImportableName
|
import org.jetbrains.kotlin.analysis.api.fir.utils.computeImportableName
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -41,15 +41,15 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
|
|||||||
|
|
||||||
internal class KtFirImportOptimizer(
|
internal class KtFirImportOptimizer(
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val firResolveState: LLFirModuleResolveState
|
private val firResolveSession: LLFirResolveSession
|
||||||
) : KtImportOptimizer() {
|
) : KtImportOptimizer() {
|
||||||
private val firSession: FirSession
|
private val firSession: FirSession
|
||||||
get() = firResolveState.useSiteFirSession
|
get() = firResolveSession.useSiteFirSession
|
||||||
|
|
||||||
override fun analyseImports(file: KtFile): KtImportOptimizerResult {
|
override fun analyseImports(file: KtFile): KtImportOptimizerResult {
|
||||||
assertIsValidAndAccessible()
|
assertIsValidAndAccessible()
|
||||||
|
|
||||||
val firFile = file.getOrBuildFirFile(firResolveState).apply { ensureResolved(FirResolvePhase.BODY_RESOLVE) }
|
val firFile = file.getOrBuildFirFile(firResolveSession).apply { ensureResolved(FirResolvePhase.BODY_RESOLVE) }
|
||||||
|
|
||||||
val existingImports = file.importDirectives
|
val existingImports = file.importDirectives
|
||||||
|
|
||||||
|
|||||||
+9
-9
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.analysis.api.impl.barebone.parentsOfType
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType
|
||||||
@@ -64,7 +64,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
|
|||||||
internal class KtFirReferenceShortener(
|
internal class KtFirReferenceShortener(
|
||||||
override val analysisSession: KtFirAnalysisSession,
|
override val analysisSession: KtFirAnalysisSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
override val firResolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
) : KtReferenceShortener(), KtFirAnalysisSessionComponent {
|
) : KtReferenceShortener(), KtFirAnalysisSessionComponent {
|
||||||
private val context = FirShorteningContext(analysisSession)
|
private val context = FirShorteningContext(analysisSession)
|
||||||
|
|
||||||
@@ -77,10 +77,10 @@ internal class KtFirReferenceShortener(
|
|||||||
val declarationToVisit = file.findSmallestDeclarationContainingSelection(selection)
|
val declarationToVisit = file.findSmallestDeclarationContainingSelection(selection)
|
||||||
?: file.withDeclarationsResolvedToBodyResolve()
|
?: file.withDeclarationsResolvedToBodyResolve()
|
||||||
|
|
||||||
val firDeclaration = declarationToVisit.getOrBuildFirOfType<FirDeclaration>(firResolveState)
|
val firDeclaration = declarationToVisit.getOrBuildFirOfType<FirDeclaration>(firResolveSession)
|
||||||
|
|
||||||
val towerContext =
|
val towerContext =
|
||||||
LowLevelFirApiFacadeForResolveOnAir.onAirGetTowerContextProvider(firResolveState, declarationToVisit)
|
LowLevelFirApiFacadeForResolveOnAir.onAirGetTowerContextProvider(firResolveSession, declarationToVisit)
|
||||||
|
|
||||||
//TODO: collect all usages of available symbols in the file and prevent importing symbols that could introduce name clashes, which
|
//TODO: collect all usages of available symbols in the file and prevent importing symbols that could introduce name clashes, which
|
||||||
// may alter the meaning of existing code.
|
// may alter the meaning of existing code.
|
||||||
@@ -90,7 +90,7 @@ internal class KtFirReferenceShortener(
|
|||||||
selection,
|
selection,
|
||||||
classShortenOption = { classShortenOption(analysisSession.firSymbolBuilder.buildSymbol(it) as KtClassLikeSymbol) },
|
classShortenOption = { classShortenOption(analysisSession.firSymbolBuilder.buildSymbol(it) as KtClassLikeSymbol) },
|
||||||
callableShortenOption = { callableShortenOption(analysisSession.firSymbolBuilder.buildSymbol(it) as KtCallableSymbol) },
|
callableShortenOption = { callableShortenOption(analysisSession.firSymbolBuilder.buildSymbol(it) as KtCallableSymbol) },
|
||||||
firResolveState,
|
firResolveSession,
|
||||||
)
|
)
|
||||||
firDeclaration.accept(collector)
|
firDeclaration.accept(collector)
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ internal class KtFirReferenceShortener(
|
|||||||
|
|
||||||
private fun KtFile.withDeclarationsResolvedToBodyResolve(): KtFile {
|
private fun KtFile.withDeclarationsResolvedToBodyResolve(): KtFile {
|
||||||
for (declaration in declarations) {
|
for (declaration in declarations) {
|
||||||
declaration.getOrBuildFir(firResolveState) // temporary hack, resolves declaration to BODY_RESOLVE stage
|
declaration.getOrBuildFir(firResolveSession) // temporary hack, resolves declaration to BODY_RESOLVE stage
|
||||||
}
|
}
|
||||||
|
|
||||||
return this
|
return this
|
||||||
@@ -164,10 +164,10 @@ private data class AvailableSymbol<out T>(
|
|||||||
)
|
)
|
||||||
|
|
||||||
private class FirShorteningContext(val analysisSession: KtFirAnalysisSession) {
|
private class FirShorteningContext(val analysisSession: KtFirAnalysisSession) {
|
||||||
private val firResolveState = analysisSession.firResolveState
|
private val firResolveSession = analysisSession.firResolveSession
|
||||||
|
|
||||||
private val firSession: FirSession
|
private val firSession: FirSession
|
||||||
get() = firResolveState.useSiteFirSession
|
get() = firResolveSession.useSiteFirSession
|
||||||
|
|
||||||
fun findFirstClassifierInScopesByName(positionScopes: List<FirScope>, targetClassName: Name): AvailableSymbol<ClassId>? {
|
fun findFirstClassifierInScopesByName(positionScopes: List<FirScope>, targetClassName: Name): AvailableSymbol<ClassId>? {
|
||||||
for (scope in positionScopes) {
|
for (scope in positionScopes) {
|
||||||
@@ -286,7 +286,7 @@ private class ElementsToShortenCollector(
|
|||||||
private val selection: TextRange,
|
private val selection: TextRange,
|
||||||
private val classShortenOption: (FirClassLikeSymbol<*>) -> ShortenOption,
|
private val classShortenOption: (FirClassLikeSymbol<*>) -> ShortenOption,
|
||||||
private val callableShortenOption: (FirCallableSymbol<*>) -> ShortenOption,
|
private val callableShortenOption: (FirCallableSymbol<*>) -> ShortenOption,
|
||||||
private val firResolveState: LLFirModuleResolveState,
|
private val firResolveSession: LLFirResolveSession,
|
||||||
) :
|
) :
|
||||||
FirVisitorVoid() {
|
FirVisitorVoid() {
|
||||||
val namesToImport: MutableList<FqName> = mutableListOf()
|
val namesToImport: MutableList<FqName> = mutableListOf()
|
||||||
|
|||||||
+5
-5
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
@@ -49,7 +49,7 @@ internal class KtFirScopeProvider(
|
|||||||
analysisSession: KtFirAnalysisSession,
|
analysisSession: KtFirAnalysisSession,
|
||||||
builder: KtSymbolByFirBuilder,
|
builder: KtSymbolByFirBuilder,
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
firResolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtScopeProvider(), ValidityTokenOwner {
|
) : KtScopeProvider(), ValidityTokenOwner {
|
||||||
// KtFirScopeProvider is thread local, so it's okay to use the same session here
|
// KtFirScopeProvider is thread local, so it's okay to use the same session here
|
||||||
@@ -58,7 +58,7 @@ internal class KtFirScopeProvider(
|
|||||||
|
|
||||||
override val analysisSession: KtFirAnalysisSession by weakRef(analysisSession)
|
override val analysisSession: KtFirAnalysisSession by weakRef(analysisSession)
|
||||||
private val builder by weakRef(builder)
|
private val builder by weakRef(builder)
|
||||||
private val firResolveState by weakRef(firResolveState)
|
private val firResolveSession by weakRef(firResolveSession)
|
||||||
|
|
||||||
private val memberScopeCache = IdentityHashMap<KtSymbolWithMembers, KtScope>()
|
private val memberScopeCache = IdentityHashMap<KtSymbolWithMembers, KtScope>()
|
||||||
private val declaredMemberScopeCache = IdentityHashMap<KtSymbolWithMembers, KtScope>()
|
private val declaredMemberScopeCache = IdentityHashMap<KtSymbolWithMembers, KtScope>()
|
||||||
@@ -176,7 +176,7 @@ internal class KtFirScopeProvider(
|
|||||||
|
|
||||||
override fun getTypeScope(type: KtType): KtScope? {
|
override fun getTypeScope(type: KtType): KtScope? {
|
||||||
check(type is KtFirType) { "KtFirScopeProvider can only work with KtFirType, but ${type::class} was provided" }
|
check(type is KtFirType) { "KtFirScopeProvider can only work with KtFirType, but ${type::class} was provided" }
|
||||||
val firSession = firResolveState.useSiteFirSession
|
val firSession = firResolveSession.useSiteFirSession
|
||||||
val firTypeScope = type.coneType.scope(
|
val firTypeScope = type.coneType.scope(
|
||||||
firSession,
|
firSession,
|
||||||
scopeSession,
|
scopeSession,
|
||||||
@@ -198,7 +198,7 @@ internal class KtFirScopeProvider(
|
|||||||
positionInFakeFile: KtElement
|
positionInFakeFile: KtElement
|
||||||
): KtScopeContext = withValidityAssertion {
|
): KtScopeContext = withValidityAssertion {
|
||||||
val towerDataContext =
|
val towerDataContext =
|
||||||
analysisSession.firResolveState.getTowerContextProvider(originalFile).getClosestAvailableParentContext(positionInFakeFile)
|
analysisSession.firResolveSession.getTowerContextProvider(originalFile).getClosestAvailableParentContext(positionInFakeFile)
|
||||||
?: error("Cannot find enclosing declaration for ${positionInFakeFile.getElementTextInContext()}")
|
?: error("Cannot find enclosing declaration for ${positionInFakeFile.getElementTextInContext()}")
|
||||||
|
|
||||||
val implicitReceivers = towerDataContext.nonLocalTowerDataElements.mapNotNull { it.implicitReceiver }.distinct()
|
val implicitReceivers = towerDataContext.nonLocalTowerDataElements.mapNotNull { it.implicitReceiver }.distinct()
|
||||||
|
|||||||
+2
-2
@@ -51,7 +51,7 @@ internal class KtFirSmartcastProvider(
|
|||||||
|
|
||||||
val possibleFunctionCall = expression.getPossiblyQualifiedCallExpressionForCallee() ?: expression
|
val possibleFunctionCall = expression.getPossiblyQualifiedCallExpressionForCallee() ?: expression
|
||||||
|
|
||||||
return when (val firExpression = possibleFunctionCall.getOrBuildFir(analysisSession.firResolveState)) {
|
return when (val firExpression = possibleFunctionCall.getOrBuildFir(analysisSession.firResolveSession)) {
|
||||||
is FirExpressionWithSmartcast -> firExpression
|
is FirExpressionWithSmartcast -> firExpression
|
||||||
is FirSafeCallExpression -> firExpression.selector as? FirExpressionWithSmartcast
|
is FirSafeCallExpression -> firExpression.selector as? FirExpressionWithSmartcast
|
||||||
is FirImplicitInvokeCall -> firExpression.explicitReceiver as? FirExpressionWithSmartcast
|
is FirImplicitInvokeCall -> firExpression.explicitReceiver as? FirExpressionWithSmartcast
|
||||||
@@ -80,7 +80,7 @@ internal class KtFirSmartcastProvider(
|
|||||||
?: expression.getQualifiedExpressionForSelector()
|
?: expression.getQualifiedExpressionForSelector()
|
||||||
?: expression
|
?: expression
|
||||||
|
|
||||||
return when (val firExpression = wholeExpression.getOrBuildFir(analysisSession.firResolveState)) {
|
return when (val firExpression = wholeExpression.getOrBuildFir(analysisSession.firResolveSession)) {
|
||||||
is FirQualifiedAccessExpression -> firExpression
|
is FirQualifiedAccessExpression -> firExpression
|
||||||
is FirSafeCallExpression -> firExpression.selector as? FirQualifiedAccessExpression
|
is FirSafeCallExpression -> firExpression.selector as? FirQualifiedAccessExpression
|
||||||
else -> null
|
else -> null
|
||||||
|
|||||||
+1
-1
@@ -65,7 +65,7 @@ internal class KtFirSymbolContainingDeclarationProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getContainingModule(symbol: KtSymbol): KtModule {
|
override fun getContainingModule(symbol: KtSymbol): KtModule {
|
||||||
return symbol.getContainingKtModule(analysisSession.firResolveState)
|
return symbol.getContainingKtModule(analysisSession.firResolveSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getContainingDeclarationForBackingFieldSymbol(symbol: KtSymbolWithKind): KtSymbolWithKind {
|
private fun getContainingDeclarationForBackingFieldSymbol(symbol: KtSymbolWithKind): KtSymbolWithKind {
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ internal class KtFirSymbolDeclarationRendererProvider(
|
|||||||
|
|
||||||
override fun render(type: KtType, options: KtTypeRendererOptions): String {
|
override fun render(type: KtType, options: KtTypeRendererOptions): String {
|
||||||
require(type is KtFirType)
|
require(type is KtFirType)
|
||||||
return ConeTypeIdeRenderer(analysisSession.firResolveState.useSiteFirSession, options).renderType(type.coneType)
|
return ConeTypeIdeRenderer(analysisSession.firResolveSession.useSiteFirSession, options).renderType(type.coneType)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun renderDeclaration(symbol: KtDeclarationSymbol, options: KtDeclarationRendererOptions): String {
|
override fun renderDeclaration(symbol: KtDeclarationSymbol, options: KtDeclarationRendererOptions): String {
|
||||||
|
|||||||
+4
-4
@@ -86,7 +86,7 @@ internal class KtFirTypeProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getKtType(ktTypeReference: KtTypeReference): KtType = withValidityAssertion {
|
override fun getKtType(ktTypeReference: KtTypeReference): KtType = withValidityAssertion {
|
||||||
when (val fir = ktTypeReference.getOrBuildFir(firResolveState)) {
|
when (val fir = ktTypeReference.getOrBuildFir(firResolveSession)) {
|
||||||
is FirResolvedTypeRef -> fir.coneType.asKtType()
|
is FirResolvedTypeRef -> fir.coneType.asKtType()
|
||||||
is FirDelegatedConstructorCall -> fir.constructedTypeRef.coneType.asKtType()
|
is FirDelegatedConstructorCall -> fir.constructedTypeRef.coneType.asKtType()
|
||||||
else -> throwUnexpectedFirElementError(fir, ktTypeReference)
|
else -> throwUnexpectedFirElementError(fir, ktTypeReference)
|
||||||
@@ -94,7 +94,7 @@ internal class KtFirTypeProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getReceiverTypeForDoubleColonExpression(expression: KtDoubleColonExpression): KtType? = withValidityAssertion {
|
override fun getReceiverTypeForDoubleColonExpression(expression: KtDoubleColonExpression): KtType? = withValidityAssertion {
|
||||||
when (val fir = expression.getOrBuildFir(firResolveState)) {
|
when (val fir = expression.getOrBuildFir(firResolveSession)) {
|
||||||
is FirGetClassCall ->
|
is FirGetClassCall ->
|
||||||
fir.typeRef.coneType.getReceiverOfReflectionType()?.asKtType()
|
fir.typeRef.coneType.getReceiverOfReflectionType()?.asKtType()
|
||||||
is FirCallableReferenceAccess ->
|
is FirCallableReferenceAccess ->
|
||||||
@@ -122,7 +122,7 @@ internal class KtFirTypeProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getImplicitReceiverTypesAtPosition(position: KtElement): List<KtType> {
|
override fun getImplicitReceiverTypesAtPosition(position: KtElement): List<KtType> {
|
||||||
return analysisSession.firResolveState.getTowerContextProvider(position.containingKtFile)
|
return analysisSession.firResolveSession.getTowerContextProvider(position.containingKtFile)
|
||||||
.getClosestAvailableParentContext(position)?.implicitReceiverStack?.map { it.type.asKtType() } ?: emptyList()
|
.getClosestAvailableParentContext(position)?.implicitReceiverStack?.map { it.type.asKtType() } ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@ internal class KtFirTypeProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeLookupTagBasedType.getSubstitutedSuperTypes(shouldApproximate: Boolean): Sequence<ConeKotlinType> {
|
private fun ConeLookupTagBasedType.getSubstitutedSuperTypes(shouldApproximate: Boolean): Sequence<ConeKotlinType> {
|
||||||
val session = analysisSession.firResolveState.useSiteFirSession
|
val session = analysisSession.firResolveSession.useSiteFirSession
|
||||||
val symbol = lookupTag.toSymbol(session)
|
val symbol = lookupTag.toSymbol(session)
|
||||||
val superTypes = when (symbol) {
|
val superTypes = when (symbol) {
|
||||||
is FirAnonymousObjectSymbol -> symbol.superConeTypes
|
is FirAnonymousObjectSymbol -> symbol.superConeTypes
|
||||||
|
|||||||
+2
-2
@@ -44,13 +44,13 @@ internal class KtFirVisibilityChecker(
|
|||||||
val nonLocalContainingDeclaration = findContainingNonLocalDeclaration(position)
|
val nonLocalContainingDeclaration = findContainingNonLocalDeclaration(position)
|
||||||
val useSiteFirFile = useSiteFile.firSymbol.fir
|
val useSiteFirFile = useSiteFile.firSymbol.fir
|
||||||
val containers = nonLocalContainingDeclaration
|
val containers = nonLocalContainingDeclaration
|
||||||
?.getOrBuildFirSafe<FirCallableDeclaration>(analysisSession.firResolveState)
|
?.getOrBuildFirSafe<FirCallableDeclaration>(analysisSession.firResolveSession)
|
||||||
?.collectDesignation()
|
?.collectDesignation()
|
||||||
?.path
|
?.path
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
|
|
||||||
val explicitDispatchReceiver = receiverExpression
|
val explicitDispatchReceiver = receiverExpression
|
||||||
?.getOrBuildFirSafe<FirExpression>(analysisSession.firResolveState)
|
?.getOrBuildFirSafe<FirExpression>(analysisSession.firResolveSession)
|
||||||
?.let { ExpressionReceiverValue(it) }
|
?.let { ExpressionReceiverValue(it) }
|
||||||
|
|
||||||
val candidateFirSymbol = candidateSymbol.firSymbol.fir as FirMemberDeclaration
|
val candidateFirSymbol = candidateSymbol.firSymbol.fir as FirMemberDeclaration
|
||||||
|
|||||||
+5
-5
@@ -188,8 +188,8 @@ internal object FirReferenceResolveHelper {
|
|||||||
if (expression.isSyntheticOperatorReference()) return emptyList()
|
if (expression.isSyntheticOperatorReference()) return emptyList()
|
||||||
val symbolBuilder = analysisSession.firSymbolBuilder
|
val symbolBuilder = analysisSession.firSymbolBuilder
|
||||||
val adjustedResolutionExpression = adjustResolutionExpression(expression)
|
val adjustedResolutionExpression = adjustResolutionExpression(expression)
|
||||||
val fir = adjustedResolutionExpression.getOrBuildFir(analysisSession.firResolveState)
|
val fir = adjustedResolutionExpression.getOrBuildFir(analysisSession.firResolveSession)
|
||||||
val session = analysisSession.firResolveState.useSiteFirSession
|
val session = analysisSession.firResolveSession.useSiteFirSession
|
||||||
return when (fir) {
|
return when (fir) {
|
||||||
is FirResolvedTypeRef -> getSymbolsForResolvedTypeRef(fir, expression, session, symbolBuilder)
|
is FirResolvedTypeRef -> getSymbolsForResolvedTypeRef(fir, expression, session, symbolBuilder)
|
||||||
is FirResolvedQualifier ->
|
is FirResolvedQualifier ->
|
||||||
@@ -258,7 +258,7 @@ internal object FirReferenceResolveHelper {
|
|||||||
): Collection<KtSymbol> {
|
): Collection<KtSymbol> {
|
||||||
val parentAsCall = expression.parent as? KtCallExpression
|
val parentAsCall = expression.parent as? KtCallExpression
|
||||||
if (parentAsCall != null) {
|
if (parentAsCall != null) {
|
||||||
val firResolvable = parentAsCall.getOrBuildFirSafe<FirResolvable>(analysisSession.firResolveState)
|
val firResolvable = parentAsCall.getOrBuildFirSafe<FirResolvable>(analysisSession.firResolveSession)
|
||||||
if (firResolvable != null) {
|
if (firResolvable != null) {
|
||||||
return getSymbolsByResolvable(firResolvable, expression, session, symbolBuilder)
|
return getSymbolsByResolvable(firResolvable, expression, session, symbolBuilder)
|
||||||
}
|
}
|
||||||
@@ -305,7 +305,7 @@ internal object FirReferenceResolveHelper {
|
|||||||
val ktValueArgumentList = ktValueArgument.parent as? KtValueArgumentList ?: return emptyList()
|
val ktValueArgumentList = ktValueArgument.parent as? KtValueArgumentList ?: return emptyList()
|
||||||
val ktCallExpression = ktValueArgumentList.parent as? KtCallElement ?: return emptyList()
|
val ktCallExpression = ktValueArgumentList.parent as? KtCallElement ?: return emptyList()
|
||||||
|
|
||||||
val firCall = ktCallExpression.getOrBuildFirSafe<FirCall>(analysisSession.firResolveState) ?: return emptyList()
|
val firCall = ktCallExpression.getOrBuildFirSafe<FirCall>(analysisSession.firResolveSession) ?: return emptyList()
|
||||||
val parameter = firCall.findCorrespondingParameter(ktValueArgument) ?: return emptyList()
|
val parameter = firCall.findCorrespondingParameter(ktValueArgument) ?: return emptyList()
|
||||||
return listOfNotNull(parameter.buildSymbol(symbolBuilder))
|
return listOfNotNull(parameter.buildSymbol(symbolBuilder))
|
||||||
}
|
}
|
||||||
@@ -333,7 +333,7 @@ internal object FirReferenceResolveHelper {
|
|||||||
parent = parent.parent as? KtDotQualifiedExpression
|
parent = parent.parent as? KtDotQualifiedExpression
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
val parentFir = selectorExpression.getOrBuildFir(analysisSession.firResolveState)
|
val parentFir = selectorExpression.getOrBuildFir(analysisSession.firResolveSession)
|
||||||
if (parentFir is FirResolvedQualifier) {
|
if (parentFir is FirResolvedQualifier) {
|
||||||
var classId = parentFir.classId
|
var classId = parentFir.classId
|
||||||
while (unresolvedCounter > 0) {
|
while (unresolvedCounter > 0) {
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ class KtFirArrayAccessReference(
|
|||||||
) : KtArrayAccessReference(expression), KtFirReference {
|
) : KtArrayAccessReference(expression), KtFirReference {
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
check(this is KtFirAnalysisSession)
|
check(this is KtFirAnalysisSession)
|
||||||
val fir = element.getOrBuildFirSafe<FirFunctionCall>(firResolveState) ?: return emptyList()
|
val fir = element.getOrBuildFirSafe<FirFunctionCall>(firResolveSession) ?: return emptyList()
|
||||||
return fir.getCandidateSymbols().map { it.fir.buildSymbol(firSymbolBuilder) }
|
return fir.getCandidateSymbols().map { it.fir.buildSymbol(firSymbolBuilder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ class KtFirCollectionLiteralReference(
|
|||||||
) : KtCollectionLiteralReference(expression), KtFirReference {
|
) : KtCollectionLiteralReference(expression), KtFirReference {
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
check(this is KtFirAnalysisSession)
|
check(this is KtFirAnalysisSession)
|
||||||
val fir = element.getOrBuildFirSafe<FirArrayOfCall>(firResolveState) ?: return emptyList()
|
val fir = element.getOrBuildFirSafe<FirArrayOfCall>(firResolveSession) ?: return emptyList()
|
||||||
val type = fir.typeRef.coneTypeSafe<ConeClassLikeType>() ?: return listOfNotNull(arrayOfSymbol(arrayOf))
|
val type = fir.typeRef.coneTypeSafe<ConeClassLikeType>() ?: return listOfNotNull(arrayOfSymbol(arrayOf))
|
||||||
val call = arrayTypeToArrayOfCall[type.lookupTag.classId] ?: arrayOf
|
val call = arrayTypeToArrayOfCall[type.lookupTag.classId] ?: arrayOf
|
||||||
return listOfNotNull(arrayOfSymbol(call))
|
return listOfNotNull(arrayOfSymbol(call))
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ class KtFirConstructorDelegationReference(
|
|||||||
|
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
check(this is KtFirAnalysisSession)
|
check(this is KtFirAnalysisSession)
|
||||||
val fir = expression.getOrBuildFirSafe<FirDelegatedConstructorCall>(firResolveState) ?: return emptyList()
|
val fir = expression.getOrBuildFirSafe<FirDelegatedConstructorCall>(firResolveSession) ?: return emptyList()
|
||||||
return listOfNotNull(fir.calleeReference.getResolvedKtSymbolOfNameReference(firSymbolBuilder))
|
return listOfNotNull(fir.calleeReference.getResolvedKtSymbolOfNameReference(firSymbolBuilder))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ class KtFirDestructuringDeclarationReference(
|
|||||||
|
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
check(this is KtFirAnalysisSession)
|
check(this is KtFirAnalysisSession)
|
||||||
val fir = expression.getOrBuildFirSafe<FirProperty>(firResolveState) ?: return emptyList()
|
val fir = expression.getOrBuildFirSafe<FirProperty>(firResolveSession) ?: return emptyList()
|
||||||
return listOfNotNull(
|
return listOfNotNull(
|
||||||
fir.buildSymbol(firSymbolBuilder),
|
fir.buildSymbol(firSymbolBuilder),
|
||||||
getComponentNSymbol(fir)
|
getComponentNSymbol(fir)
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.psi.KtForExpression
|
|||||||
open class KtFirForLoopInReference(expression: KtForExpression) : KtForLoopInReference(expression), KtFirReference {
|
open class KtFirForLoopInReference(expression: KtForExpression) : KtForLoopInReference(expression), KtFirReference {
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
check(this is KtFirAnalysisSession)
|
check(this is KtFirAnalysisSession)
|
||||||
val firLoop = expression.getOrBuildFirSafe<FirWhileLoop>(firResolveState) ?: return emptyList()
|
val firLoop = expression.getOrBuildFirSafe<FirWhileLoop>(firResolveSession) ?: return emptyList()
|
||||||
val condition = firLoop.condition as? FirFunctionCall
|
val condition = firLoop.condition as? FirFunctionCall
|
||||||
val iterator = this@KtFirForLoopInReference.run {
|
val iterator = this@KtFirForLoopInReference.run {
|
||||||
val callee = (condition?.explicitReceiver as? FirQualifiedAccessExpression)?.calleeReference
|
val callee = (condition?.explicitReceiver as? FirQualifiedAccessExpression)?.calleeReference
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ class KtFirPropertyDelegationMethodsReference(
|
|||||||
) : KtPropertyDelegationMethodsReference(element), KtFirReference {
|
) : KtPropertyDelegationMethodsReference(element), KtFirReference {
|
||||||
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
|
||||||
check(this is KtFirAnalysisSession)
|
check(this is KtFirAnalysisSession)
|
||||||
val property = (expression.parent as? KtElement)?.getOrBuildFirSafe<FirProperty>(firResolveState) ?: return emptyList()
|
val property = (expression.parent as? KtElement)?.getOrBuildFirSafe<FirProperty>(firResolveSession) ?: return emptyList()
|
||||||
if (property.delegate == null) return emptyList()
|
if (property.delegate == null) return emptyList()
|
||||||
val getValueSymbol = (property.getter?.singleStatementOfType<FirReturnExpression>()?.result as? FirFunctionCall)?.getCalleeSymbol()
|
val getValueSymbol = (property.getter?.singleStatementOfType<FirReturnExpression>()?.result as? FirFunctionCall)?.getCalleeSymbol()
|
||||||
val setValueSymbol = property.setter?.singleStatementOfType<FirFunctionCall>()?.getCalleeSymbol()
|
val setValueSymbol = property.setter?.singleStatementOfType<FirFunctionCall>()?.getCalleeSymbol()
|
||||||
|
|||||||
+2
-2
@@ -16,14 +16,14 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
||||||
|
|
||||||
internal class KtFirAnonymousFunctionSymbol(
|
internal class KtFirAnonymousFunctionSymbol(
|
||||||
override val firSymbol: FirAnonymousFunctionSymbol,
|
override val firSymbol: FirAnonymousFunctionSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
) : KtAnonymousFunctionSymbol(), KtFirSymbol<FirAnonymousFunctionSymbol> {
|
) : KtAnonymousFunctionSymbol(), KtFirSymbol<FirAnonymousFunctionSymbol> {
|
||||||
|
|||||||
+3
-3
@@ -16,18 +16,18 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointe
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
||||||
|
|
||||||
internal class KtFirAnonymousObjectSymbol(
|
internal class KtFirAnonymousObjectSymbol(
|
||||||
override val firSymbol: FirAnonymousObjectSymbol,
|
override val firSymbol: FirAnonymousObjectSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
) : KtAnonymousObjectSymbol(), KtFirSymbol<FirAnonymousObjectSymbol> {
|
) : KtAnonymousObjectSymbol(), KtFirSymbol<FirAnonymousObjectSymbol> {
|
||||||
override val psi: PsiElement? by cached { firSymbol.findPsi() }
|
override val psi: PsiElement? by cached { firSymbol.findPsi() }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override val superTypes: List<KtType> by cached { firSymbol.superTypesList(builder) }
|
override val superTypes: List<KtType> by cached { firSymbol.superTypesList(builder) }
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.name.StandardClassIds
|
|||||||
|
|
||||||
object KtFirArrayOfSymbolProvider {
|
object KtFirArrayOfSymbolProvider {
|
||||||
internal fun KtFirAnalysisSession.arrayOfSymbol(identifier: Name): KtFirFunctionSymbol? {
|
internal fun KtFirAnalysisSession.arrayOfSymbol(identifier: Name): KtFirFunctionSymbol? {
|
||||||
val firSymbol = firResolveState.useSiteFirSession.symbolProvider.getTopLevelCallableSymbols(kotlinPackage, identifier).firstOrNull {
|
val firSymbol = firResolveSession.useSiteFirSession.symbolProvider.getTopLevelCallableSymbols(kotlinPackage, identifier).firstOrNull {
|
||||||
/* choose (for byte array)
|
/* choose (for byte array)
|
||||||
* public fun byteArrayOf(vararg elements: kotlin.Byte): kotlin.ByteArray
|
* public fun byteArrayOf(vararg elements: kotlin.Byte): kotlin.ByteArray
|
||||||
*/
|
*/
|
||||||
|
|||||||
+2
-2
@@ -14,12 +14,12 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||||
|
|
||||||
internal class KtFirBackingFieldSymbol(
|
internal class KtFirBackingFieldSymbol(
|
||||||
override val firSymbol: FirBackingFieldSymbol,
|
override val firSymbol: FirBackingFieldSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtBackingFieldSymbol(), KtFirSymbol<FirBackingFieldSymbol> {
|
) : KtBackingFieldSymbol(), KtFirSymbol<FirBackingFieldSymbol> {
|
||||||
|
|||||||
+2
-2
@@ -13,12 +13,12 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
|
||||||
|
|
||||||
internal class KtFirClassInitializerSymbol(
|
internal class KtFirClassInitializerSymbol(
|
||||||
override val firSymbol: FirAnonymousInitializerSymbol,
|
override val firSymbol: FirAnonymousInitializerSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtClassInitializerSymbol(), KtFirSymbol<FirAnonymousInitializerSymbol> {
|
) : KtClassInitializerSymbol(), KtFirSymbol<FirAnonymousInitializerSymbol> {
|
||||||
override val psi: PsiElement? by cached { firSymbol.findPsi() }
|
override val psi: PsiElement? by cached { firSymbol.findPsi() }
|
||||||
|
|||||||
+3
-3
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||||
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
|
|
||||||
internal class KtFirConstructorSymbol(
|
internal class KtFirConstructorSymbol(
|
||||||
override val firSymbol: FirConstructorSymbol,
|
override val firSymbol: FirConstructorSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtConstructorSymbol(), KtFirSymbol<FirConstructorSymbol> {
|
) : KtConstructorSymbol(), KtFirSymbol<FirConstructorSymbol> {
|
||||||
@@ -48,7 +48,7 @@ internal class KtFirConstructorSymbol(
|
|||||||
|
|
||||||
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override val containingClassIdIfNonLocal: ClassId?
|
override val containingClassIdIfNonLocal: ClassId?
|
||||||
get() = withValidityAssertion { firSymbol.containingClass()?.classId?.takeUnless { it.isLocal } }
|
get() = withValidityAssertion { firSymbol.containingClass()?.classId?.takeUnless { it.isLocal } }
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirEnumEntrySymbol(
|
internal class KtFirEnumEntrySymbol(
|
||||||
override val firSymbol: FirEnumEntrySymbol,
|
override val firSymbol: FirEnumEntrySymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtEnumEntrySymbol(), KtFirSymbol<FirEnumEntrySymbol> {
|
) : KtEnumEntrySymbol(), KtFirSymbol<FirEnumEntrySymbol> {
|
||||||
|
|||||||
+3
-3
@@ -14,12 +14,12 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithDeclaration
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
|
|
||||||
internal class KtFirFileSymbol(
|
internal class KtFirFileSymbol(
|
||||||
override val firSymbol: FirFileSymbol,
|
override val firSymbol: FirFileSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol<FirFileSymbol> {
|
) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol<FirFileSymbol> {
|
||||||
override val psi: PsiElement? by cached { firSymbol.findPsi() }
|
override val psi: PsiElement? by cached { firSymbol.findPsi() }
|
||||||
@@ -29,7 +29,7 @@ internal class KtFirFileSymbol(
|
|||||||
TODO("Creating pointers for files from library is not supported yet")
|
TODO("Creating pointers for files from library is not supported yet")
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
||||||
override fun hashCode(): Int = symbolHashCode()
|
override fun hashCode(): Int = symbolHashCode()
|
||||||
|
|||||||
+3
-3
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.WrongSymbolForSamConst
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirFunctionSymbol(
|
internal class KtFirFunctionSymbol(
|
||||||
override val firSymbol: FirNamedFunctionSymbol,
|
override val firSymbol: FirNamedFunctionSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtFunctionSymbol(), KtFirSymbol<FirNamedFunctionSymbol> {
|
) : KtFunctionSymbol(), KtFirSymbol<FirNamedFunctionSymbol> {
|
||||||
@@ -57,7 +57,7 @@ internal class KtFirFunctionSymbol(
|
|||||||
override val hasStableParameterNames: Boolean
|
override val hasStableParameterNames: Boolean
|
||||||
get() = withValidityAssertion { firSymbol.fir.getHasStableParameterNames(firSymbol.moduleData.session) }
|
get() = withValidityAssertion { firSymbol.fir.getHasStableParameterNames(firSymbol.moduleData.session) }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override val isSuspend: Boolean get() = withValidityAssertion { firSymbol.isSuspend }
|
override val isSuspend: Boolean get() = withValidityAssertion { firSymbol.isSuspend }
|
||||||
override val isOverride: Boolean get() = withValidityAssertion { firSymbol.isOverride }
|
override val isOverride: Boolean get() = withValidityAssertion { firSymbol.isOverride }
|
||||||
|
|||||||
+2
-2
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirJavaFieldSymbol(
|
internal class KtFirJavaFieldSymbol(
|
||||||
override val firSymbol: FirFieldSymbol,
|
override val firSymbol: FirFieldSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtJavaFieldSymbol(), KtFirSymbol<FirFieldSymbol> {
|
) : KtJavaFieldSymbol(), KtFirSymbol<FirFieldSymbol> {
|
||||||
|
|||||||
+3
-3
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.WrongSymbolForSamConst
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
@@ -43,7 +43,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirKotlinPropertySymbol(
|
internal class KtFirKotlinPropertySymbol(
|
||||||
override val firSymbol: FirPropertySymbol,
|
override val firSymbol: FirPropertySymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtKotlinPropertySymbol(), KtFirSymbol<FirPropertySymbol> {
|
) : KtKotlinPropertySymbol(), KtFirSymbol<FirPropertySymbol> {
|
||||||
@@ -78,7 +78,7 @@ internal class KtFirKotlinPropertySymbol(
|
|||||||
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
|
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
|
||||||
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() }
|
override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() }
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -17,13 +17,13 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
internal class KtFirLocalVariableSymbol(
|
internal class KtFirLocalVariableSymbol(
|
||||||
override val firSymbol: FirPropertySymbol,
|
override val firSymbol: FirPropertySymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtLocalVariableSymbol(),
|
) : KtLocalVariableSymbol(),
|
||||||
|
|||||||
+3
-3
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirNamedClassOrObjectSymbol(
|
internal class KtFirNamedClassOrObjectSymbol(
|
||||||
override val firSymbol: FirRegularClassSymbol,
|
override val firSymbol: FirRegularClassSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtNamedClassOrObjectSymbol(), KtFirSymbol<FirRegularClassSymbol> {
|
) : KtNamedClassOrObjectSymbol(), KtFirSymbol<FirRegularClassSymbol> {
|
||||||
@@ -65,7 +65,7 @@ internal class KtFirNamedClassOrObjectSymbol(
|
|||||||
else -> possiblyRawVisibility
|
else -> possiblyRawVisibility
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override val isInner: Boolean get() = withValidityAssertion { firSymbol.isInner }
|
override val isInner: Boolean get() = withValidityAssertion { firSymbol.isInner }
|
||||||
override val isData: Boolean get() = withValidityAssertion { firSymbol.isData }
|
override val isData: Boolean get() = withValidityAssertion { firSymbol.isData }
|
||||||
|
|||||||
+3
-3
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.name.CallableId
|
|||||||
|
|
||||||
internal class KtFirPropertyGetterSymbol(
|
internal class KtFirPropertyGetterSymbol(
|
||||||
override val firSymbol: FirPropertyAccessorSymbol,
|
override val firSymbol: FirPropertyAccessorSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
) : KtPropertyGetterSymbol(), KtFirSymbol<FirPropertyAccessorSymbol> {
|
) : KtPropertyGetterSymbol(), KtFirSymbol<FirPropertyAccessorSymbol> {
|
||||||
@@ -54,7 +54,7 @@ internal class KtFirPropertyGetterSymbol(
|
|||||||
override val returnType: KtType get() = withValidityAssertion { firSymbol.returnType(builder) }
|
override val returnType: KtType get() = withValidityAssertion { firSymbol.returnType(builder) }
|
||||||
override val receiverType: KtType? get() = withValidityAssertion { firSymbol.receiverType(builder) }
|
override val receiverType: KtType? get() = withValidityAssertion { firSymbol.receiverType(builder) }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns [CallableId] of the delegated Java method if the corresponding property of this setter is a synthetic Java property.
|
* Returns [CallableId] of the delegated Java method if the corresponding property of this setter is a synthetic Java property.
|
||||||
|
|||||||
+3
-3
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.name.CallableId
|
|||||||
|
|
||||||
internal class KtFirPropertySetterSymbol(
|
internal class KtFirPropertySetterSymbol(
|
||||||
override val firSymbol: FirPropertyAccessorSymbol,
|
override val firSymbol: FirPropertyAccessorSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
) : KtPropertySetterSymbol(), KtFirSymbol<FirPropertyAccessorSymbol> {
|
) : KtPropertySetterSymbol(), KtFirSymbol<FirPropertyAccessorSymbol> {
|
||||||
@@ -51,7 +51,7 @@ internal class KtFirPropertySetterSymbol(
|
|||||||
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
|
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
|
||||||
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns [CallableId] of the delegated Java method if the corresponding property of this setter is a synthetic Java property.
|
* Returns [CallableId] of the delegated Java method if the corresponding property of this setter is a synthetic Java property.
|
||||||
|
|||||||
+2
-2
@@ -17,12 +17,12 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
|
||||||
internal class KtFirReceiverParameterSymbol(
|
internal class KtFirReceiverParameterSymbol(
|
||||||
val firSymbol: FirCallableSymbol<*>,
|
val firSymbol: FirCallableSymbol<*>,
|
||||||
val resolveState: LLFirModuleResolveState,
|
val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
_builder: KtSymbolByFirBuilder
|
_builder: KtSymbolByFirBuilder
|
||||||
) : KtReceiverParameterSymbol(), ValidityTokenOwner {
|
) : KtReceiverParameterSymbol(), ValidityTokenOwner {
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
||||||
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirSamConstructorSymbol(
|
internal class KtFirSamConstructorSymbol(
|
||||||
override val firSymbol: FirNamedFunctionSymbol,
|
override val firSymbol: FirNamedFunctionSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtSamConstructorSymbol(), KtFirSymbol<FirNamedFunctionSymbol> {
|
) : KtSamConstructorSymbol(), KtFirSymbol<FirNamedFunctionSymbol> {
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind
|
|||||||
import org.jetbrains.kotlin.analysis.api.ValidityTokenOwner
|
import org.jetbrains.kotlin.analysis.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||||
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|||||||
internal interface KtFirSymbol<out S : FirBasedSymbol<*>> : KtSymbol, ValidityTokenOwner {
|
internal interface KtFirSymbol<out S : FirBasedSymbol<*>> : KtSymbol, ValidityTokenOwner {
|
||||||
val firSymbol: S
|
val firSymbol: S
|
||||||
|
|
||||||
abstract val resolveState: LLFirModuleResolveState
|
val firResolveSession: LLFirResolveSession
|
||||||
|
|
||||||
override val origin: KtSymbolOrigin get() = firSymbol.fir.ktSymbolOrigin()
|
override val origin: KtSymbolOrigin get() = firSymbol.fir.ktSymbolOrigin()
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-19
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.analysis.api.fir.utils.weakRef
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbolOfType
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbolOfType
|
||||||
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.psi.*
|
|||||||
internal class KtFirSymbolProvider(
|
internal class KtFirSymbolProvider(
|
||||||
override val analysisSession: KtAnalysisSession,
|
override val analysisSession: KtAnalysisSession,
|
||||||
firSymbolProvider: FirSymbolProvider,
|
firSymbolProvider: FirSymbolProvider,
|
||||||
private val resolveState: LLFirModuleResolveState,
|
private val firResolveSession: LLFirResolveSession,
|
||||||
private val firSymbolBuilder: KtSymbolByFirBuilder,
|
private val firSymbolBuilder: KtSymbolByFirBuilder,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtSymbolProvider(), ValidityTokenOwner {
|
) : KtSymbolProvider(), ValidityTokenOwner {
|
||||||
@@ -41,23 +41,23 @@ internal class KtFirSymbolProvider(
|
|||||||
)
|
)
|
||||||
|
|
||||||
psi.isLoopParameter -> {
|
psi.isLoopParameter -> {
|
||||||
firSymbolBuilder.variableLikeBuilder.buildLocalVariableSymbol(psi.resolveToFirSymbolOfType<FirPropertySymbol>(resolveState))
|
firSymbolBuilder.variableLikeBuilder.buildLocalVariableSymbol(psi.resolveToFirSymbolOfType<FirPropertySymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
firSymbolBuilder.variableLikeBuilder.buildValueParameterSymbol(
|
firSymbolBuilder.variableLikeBuilder.buildValueParameterSymbol(
|
||||||
psi.resolveToFirSymbolOfType<FirValueParameterSymbol>(resolveState)
|
psi.resolveToFirSymbolOfType<FirValueParameterSymbol>(firResolveSession)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFileSymbol(psi: KtFile): KtFileSymbol = withValidityAssertion {
|
override fun getFileSymbol(psi: KtFile): KtFileSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.buildFileSymbol(psi.getOrBuildFirFile(resolveState).symbol)
|
firSymbolBuilder.buildFileSymbol(psi.getOrBuildFirFile(firResolveSession).symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFunctionLikeSymbol(psi: KtNamedFunction): KtFunctionLikeSymbol = withValidityAssertion {
|
override fun getFunctionLikeSymbol(psi: KtNamedFunction): KtFunctionLikeSymbol = withValidityAssertion {
|
||||||
when (val firSymbol = psi.resolveToFirSymbolOfType<FirFunctionSymbol<*>>(resolveState)) {
|
when (val firSymbol = psi.resolveToFirSymbolOfType<FirFunctionSymbol<*>>(firResolveSession)) {
|
||||||
is FirNamedFunctionSymbol -> {
|
is FirNamedFunctionSymbol -> {
|
||||||
if (firSymbol.origin == FirDeclarationOrigin.SamConstructor) {
|
if (firSymbol.origin == FirDeclarationOrigin.SamConstructor) {
|
||||||
firSymbolBuilder.functionLikeBuilder.buildSamConstructorSymbol(firSymbol)
|
firSymbolBuilder.functionLikeBuilder.buildSamConstructorSymbol(firSymbol)
|
||||||
@@ -72,60 +72,60 @@ internal class KtFirSymbolProvider(
|
|||||||
|
|
||||||
override fun getConstructorSymbol(psi: KtConstructor<*>): KtConstructorSymbol = withValidityAssertion {
|
override fun getConstructorSymbol(psi: KtConstructor<*>): KtConstructorSymbol = withValidityAssertion {
|
||||||
|
|
||||||
firSymbolBuilder.functionLikeBuilder.buildConstructorSymbol(psi.resolveToFirSymbolOfType<FirConstructorSymbol>(resolveState))
|
firSymbolBuilder.functionLikeBuilder.buildConstructorSymbol(psi.resolveToFirSymbolOfType<FirConstructorSymbol>(firResolveSession))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTypeParameterSymbol(psi: KtTypeParameter): KtTypeParameterSymbol = withValidityAssertion {
|
override fun getTypeParameterSymbol(psi: KtTypeParameter): KtTypeParameterSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.classifierBuilder.buildTypeParameterSymbol(psi.resolveToFirSymbolOfType<FirTypeParameterSymbol>(resolveState))
|
firSymbolBuilder.classifierBuilder.buildTypeParameterSymbol(psi.resolveToFirSymbolOfType<FirTypeParameterSymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTypeAliasSymbol(psi: KtTypeAlias): KtTypeAliasSymbol = withValidityAssertion {
|
override fun getTypeAliasSymbol(psi: KtTypeAlias): KtTypeAliasSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.classifierBuilder.buildTypeAliasSymbol(psi.resolveToFirSymbolOfType<FirTypeAliasSymbol>(resolveState))
|
firSymbolBuilder.classifierBuilder.buildTypeAliasSymbol(psi.resolveToFirSymbolOfType<FirTypeAliasSymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getEnumEntrySymbol(psi: KtEnumEntry): KtEnumEntrySymbol = withValidityAssertion {
|
override fun getEnumEntrySymbol(psi: KtEnumEntry): KtEnumEntrySymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.buildEnumEntrySymbol(psi.resolveToFirSymbolOfType<FirEnumEntrySymbol>(resolveState))
|
firSymbolBuilder.buildEnumEntrySymbol(psi.resolveToFirSymbolOfType<FirEnumEntrySymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAnonymousFunctionSymbol(psi: KtNamedFunction): KtAnonymousFunctionSymbol = withValidityAssertion {
|
override fun getAnonymousFunctionSymbol(psi: KtNamedFunction): KtAnonymousFunctionSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(psi.getOrBuildFirOfType(resolveState))
|
firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(psi.getOrBuildFirOfType(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAnonymousFunctionSymbol(psi: KtFunctionLiteral): KtAnonymousFunctionSymbol = withValidityAssertion {
|
override fun getAnonymousFunctionSymbol(psi: KtFunctionLiteral): KtAnonymousFunctionSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(
|
firSymbolBuilder.functionLikeBuilder.buildAnonymousFunctionSymbol(
|
||||||
psi.resolveToFirSymbolOfType<FirAnonymousFunctionSymbol>(resolveState)
|
psi.resolveToFirSymbolOfType<FirAnonymousFunctionSymbol>(firResolveSession)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getVariableSymbol(psi: KtProperty): KtVariableSymbol = withValidityAssertion {
|
override fun getVariableSymbol(psi: KtProperty): KtVariableSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.variableLikeBuilder.buildVariableSymbol(psi.resolveToFirSymbolOfType<FirPropertySymbol>(resolveState))
|
firSymbolBuilder.variableLikeBuilder.buildVariableSymbol(psi.resolveToFirSymbolOfType<FirPropertySymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAnonymousObjectSymbol(psi: KtObjectLiteralExpression): KtAnonymousObjectSymbol = withValidityAssertion {
|
override fun getAnonymousObjectSymbol(psi: KtObjectLiteralExpression): KtAnonymousObjectSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.classifierBuilder.buildAnonymousObjectSymbol(
|
firSymbolBuilder.classifierBuilder.buildAnonymousObjectSymbol(
|
||||||
psi.objectDeclaration.resolveToFirSymbolOfType<FirAnonymousObjectSymbol>(resolveState)
|
psi.objectDeclaration.resolveToFirSymbolOfType<FirAnonymousObjectSymbol>(firResolveSession)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol = withValidityAssertion {
|
override fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.classifierBuilder.buildClassOrObjectSymbol(psi.resolveToFirSymbolOfType<FirClassSymbol<*>>(resolveState))
|
firSymbolBuilder.classifierBuilder.buildClassOrObjectSymbol(psi.resolveToFirSymbolOfType<FirClassSymbol<*>>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol? = withValidityAssertion {
|
override fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol? = withValidityAssertion {
|
||||||
require(psi !is KtObjectDeclaration || psi.parent !is KtObjectLiteralExpression)
|
require(psi !is KtObjectDeclaration || psi.parent !is KtObjectLiteralExpression)
|
||||||
// A KtClassOrObject may also map to an FirEnumEntry. Hence, we need to return null in this case.
|
// A KtClassOrObject may also map to an FirEnumEntry. Hence, we need to return null in this case.
|
||||||
if (psi is KtEnumEntry) return null
|
if (psi is KtEnumEntry) return null
|
||||||
firSymbolBuilder.classifierBuilder.buildNamedClassOrObjectSymbol(psi.resolveToFirSymbolOfType<FirRegularClassSymbol>(resolveState))
|
firSymbolBuilder.classifierBuilder.buildNamedClassOrObjectSymbol(psi.resolveToFirSymbolOfType<FirRegularClassSymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPropertyAccessorSymbol(psi: KtPropertyAccessor): KtPropertyAccessorSymbol = withValidityAssertion {
|
override fun getPropertyAccessorSymbol(psi: KtPropertyAccessor): KtPropertyAccessorSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.callableBuilder.buildPropertyAccessorSymbol(psi.resolveToFirSymbolOfType<FirPropertyAccessorSymbol>(resolveState))
|
firSymbolBuilder.callableBuilder.buildPropertyAccessorSymbol(psi.resolveToFirSymbolOfType<FirPropertyAccessorSymbol>(firResolveSession))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassInitializerSymbol(psi: KtClassInitializer): KtClassInitializerSymbol = withValidityAssertion {
|
override fun getClassInitializerSymbol(psi: KtClassInitializer): KtClassInitializerSymbol = withValidityAssertion {
|
||||||
firSymbolBuilder.anonymousInitializerBuilder.buildClassInitializer(
|
firSymbolBuilder.anonymousInitializerBuilder.buildClassInitializer(
|
||||||
psi.resolveToFirSymbolOfType<FirAnonymousInitializerSymbol>(resolveState)
|
psi.resolveToFirSymbolOfType<FirAnonymousInitializerSymbol>(firResolveSession)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,5 +139,5 @@ internal class KtFirSymbolProvider(
|
|||||||
return firs.asSequence().map { firSymbol -> firSymbolBuilder.buildSymbol(firSymbol) }
|
return firs.asSequence().map { firSymbol -> firSymbolBuilder.buildSymbol(firSymbol) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override val ROOT_PACKAGE_SYMBOL: KtPackageSymbol = KtFirPackageSymbol(FqName.ROOT, resolveState.project, token)
|
override val ROOT_PACKAGE_SYMBOL: KtPackageSymbol = KtFirPackageSymbol(FqName.ROOT, firResolveSession.project, token)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirSyntheticJavaPropertySymbol(
|
internal class KtFirSyntheticJavaPropertySymbol(
|
||||||
override val firSymbol: FirSyntheticPropertySymbol,
|
override val firSymbol: FirSyntheticPropertySymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtSyntheticJavaPropertySymbol(), KtFirSymbol<FirSyntheticPropertySymbol> {
|
) : KtSyntheticJavaPropertySymbol(), KtFirSymbol<FirSyntheticPropertySymbol> {
|
||||||
@@ -56,7 +56,7 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
|||||||
override val modality: Modality get() = withValidityAssertion { firSymbol.modality ?: firSymbol.invalidModalityError() }
|
override val modality: Modality get() = withValidityAssertion { firSymbol.modality ?: firSymbol.invalidModalityError() }
|
||||||
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() }
|
override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() }
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||||
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirTypeAliasSymbol(
|
internal class KtFirTypeAliasSymbol(
|
||||||
override val firSymbol: FirTypeAliasSymbol,
|
override val firSymbol: FirTypeAliasSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
) : KtTypeAliasSymbol(), KtFirSymbol<FirTypeAliasSymbol> {
|
) : KtTypeAliasSymbol(), KtFirSymbol<FirTypeAliasSymbol> {
|
||||||
@@ -49,7 +49,7 @@ internal class KtFirTypeAliasSymbol(
|
|||||||
override val expandedType: KtType by cached { builder.typeBuilder.buildKtType(firSymbol.resolvedExpandedTypeRef) }
|
override val expandedType: KtType by cached { builder.typeBuilder.buildKtType(firSymbol.resolvedExpandedTypeRef) }
|
||||||
|
|
||||||
override val annotationsList: KtAnnotationsList by cached {
|
override val annotationsList: KtAnnotationsList by cached {
|
||||||
KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token)
|
KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> {
|
override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> {
|
||||||
|
|||||||
+2
-2
@@ -15,14 +15,14 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
internal class KtFirTypeParameterSymbol(
|
internal class KtFirTypeParameterSymbol(
|
||||||
override val firSymbol: FirTypeParameterSymbol,
|
override val firSymbol: FirTypeParameterSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtTypeParameterSymbol(), KtFirSymbol<FirTypeParameterSymbol> {
|
) : KtTypeParameterSymbol(), KtFirSymbol<FirTypeParameterSymbol> {
|
||||||
|
|||||||
+3
-3
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointe
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.renderWithType
|
import org.jetbrains.kotlin.fir.renderWithType
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.arrayElementType
|
import org.jetbrains.kotlin.fir.types.arrayElementType
|
||||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirValueParameterSymbol(
|
internal class KtFirValueParameterSymbol(
|
||||||
override val firSymbol: FirValueParameterSymbol,
|
override val firSymbol: FirValueParameterSymbol,
|
||||||
override val resolveState: LLFirModuleResolveState,
|
override val firResolveSession: LLFirResolveSession,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtValueParameterSymbol(), KtFirSymbol<FirValueParameterSymbol> {
|
) : KtValueParameterSymbol(), KtFirSymbol<FirValueParameterSymbol> {
|
||||||
@@ -53,7 +53,7 @@ internal class KtFirValueParameterSymbol(
|
|||||||
|
|
||||||
override val hasDefaultValue: Boolean get() = withValidityAssertion { firSymbol.hasDefaultValue }
|
override val hasDefaultValue: Boolean get() = withValidityAssertion { firSymbol.hasDefaultValue }
|
||||||
|
|
||||||
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, resolveState.useSiteFirSession, token) }
|
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) }
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> {
|
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> {
|
||||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||||
|
|||||||
+1
-1
@@ -33,5 +33,5 @@ internal abstract class KtTopLevelCallableSymbolPointer<S : KtCallableSymbol>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun KtFirAnalysisSession.getCallableSymbols(callableId: CallableId) =
|
private fun KtFirAnalysisSession.getCallableSymbols(callableId: CallableId) =
|
||||||
firResolveState.useSiteFirSession.symbolProvider.getTopLevelCallableSymbols(callableId.packageName, callableId.callableName)
|
firResolveSession.useSiteFirSession.symbolProvider.getTopLevelCallableSymbols(callableId.packageName, callableId.callableName)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -58,4 +58,4 @@ internal fun FirDeclaration.createSignature(): IdSignature {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun KtFirAnalysisSession.getClassLikeSymbol(classId: ClassId) =
|
internal fun KtFirAnalysisSession.getClassLikeSymbol(classId: ClassId) =
|
||||||
firResolveState.useSiteFirSession.symbolProvider.getClassLikeSymbolByClassId(classId)?.fir
|
firResolveSession.useSiteFirSession.symbolProvider.getClassLikeSymbolByClassId(classId)?.fir
|
||||||
|
|||||||
+4
-4
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
@@ -29,7 +29,7 @@ class KtAnalysisSessionFe10BindingHolder private constructor(
|
|||||||
) {
|
) {
|
||||||
val analysisSession: KtAnalysisSession get() = firAnalysisSession
|
val analysisSession: KtAnalysisSession get() = firAnalysisSession
|
||||||
|
|
||||||
val firResolveState: LLFirModuleResolveState get() = firAnalysisSession.firResolveState
|
val firResolveSession: LLFirResolveSession get() = firAnalysisSession.firResolveSession
|
||||||
|
|
||||||
fun buildClassLikeSymbol(fir: FirClassLikeDeclaration): KtClassLikeSymbol =
|
fun buildClassLikeSymbol(fir: FirClassLikeDeclaration): KtClassLikeSymbol =
|
||||||
firAnalysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(fir.symbol)
|
firAnalysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(fir.symbol)
|
||||||
@@ -47,9 +47,9 @@ class KtAnalysisSessionFe10BindingHolder private constructor(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@InvalidWayOfUsingAnalysisSession
|
@InvalidWayOfUsingAnalysisSession
|
||||||
fun create(firResolveState: LLFirModuleResolveState, token: ValidityToken, @Suppress("UNUSED_PARAMETER") ktElement: KtElement): KtAnalysisSessionFe10BindingHolder {
|
fun create(firResolveSession: LLFirResolveSession, token: ValidityToken, @Suppress("UNUSED_PARAMETER") ktElement: KtElement): KtAnalysisSessionFe10BindingHolder {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
val firAnalysisSession = KtFirAnalysisSession.createAnalysisSessionByResolveState(firResolveState, token)
|
val firAnalysisSession = KtFirAnalysisSession.createAnalysisSessionByFirResolveSession(firResolveSession, token)
|
||||||
return KtAnalysisSessionFe10BindingHolder(firAnalysisSession)
|
return KtAnalysisSessionFe10BindingHolder(firAnalysisSession)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.utils
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsModuleData
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirKtModuleBasedModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirKtModuleBasedModuleData
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData
|
||||||
@@ -25,20 +25,20 @@ val KtSymbol.firSymbol: FirBasedSymbol<*>
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun FirBasedSymbol<*>.getContainingKtModule(resolveState: LLFirModuleResolveState): KtModule {
|
fun FirBasedSymbol<*>.getContainingKtModule(firResolveSession: LLFirResolveSession): KtModule {
|
||||||
val target = when (this) {
|
val target = when (this) {
|
||||||
is FirCallableSymbol -> {
|
is FirCallableSymbol -> {
|
||||||
// callable fake overrides have use-site FirModuleData
|
// callable fake overrides have use-site FirModuleData
|
||||||
dispatchReceiverClassOrNull()?.toFirRegularClassSymbol(resolveState.useSiteFirSession) ?: this
|
dispatchReceiverClassOrNull()?.toFirRegularClassSymbol(firResolveSession.useSiteFirSession) ?: this
|
||||||
}
|
}
|
||||||
else -> this
|
else -> this
|
||||||
}
|
}
|
||||||
return when (val moduleData = target.firModuleData) {
|
return when (val moduleData = target.firModuleData) {
|
||||||
is LLFirKtModuleBasedModuleData -> moduleData.ktModule
|
is LLFirKtModuleBasedModuleData -> moduleData.ktModule
|
||||||
is LLFirBuiltinsModuleData -> resolveState.project.getService(ProjectStructureProvider::class.java).getStdlibWithBuiltinsModule(moduleData.useSiteKtModule)
|
is LLFirBuiltinsModuleData -> firResolveSession.project.getService(ProjectStructureProvider::class.java).getStdlibWithBuiltinsModule(moduleData.useSiteKtModule)
|
||||||
?: error("Builtins not found for the ${moduleData.useSiteKtModule.moduleDescription}")
|
?: error("Builtins not found for the ${moduleData.useSiteKtModule.moduleDescription}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun KtSymbol.getContainingKtModule(resolveState: LLFirModuleResolveState): KtModule =
|
fun KtSymbol.getContainingKtModule(firResolveSession: LLFirResolveSession): KtModule =
|
||||||
firSymbol.getContainingKtModule(resolveState)
|
firSymbol.getContainingKtModule(firResolveSession)
|
||||||
+11
-11
@@ -27,32 +27,32 @@ import kotlin.reflect.KClass
|
|||||||
abstract class CachingKtAnalysisSessionProvider<State : Any>(private val project: Project) : KtAnalysisSessionProvider() {
|
abstract class CachingKtAnalysisSessionProvider<State : Any>(private val project: Project) : KtAnalysisSessionProvider() {
|
||||||
private val cache = KtAnalysisSessionCache<Pair<State, KClass<out ValidityToken>>>(project)
|
private val cache = KtAnalysisSessionCache<Pair<State, KClass<out ValidityToken>>>(project)
|
||||||
|
|
||||||
protected abstract fun getResolveState(contextElement: KtElement): State
|
protected abstract fun getFirResolveSession(contextElement: KtElement): State
|
||||||
protected abstract fun getResolveState(contextSymbol: KtSymbol): State
|
protected abstract fun getFirResolveSession(contextSymbol: KtSymbol): State
|
||||||
|
|
||||||
protected abstract fun createAnalysisSession(
|
protected abstract fun createAnalysisSession(
|
||||||
resolveState: State,
|
firResolveSession: State,
|
||||||
validityToken: ValidityToken,
|
validityToken: ValidityToken,
|
||||||
): KtAnalysisSession
|
): KtAnalysisSession
|
||||||
|
|
||||||
@InvalidWayOfUsingAnalysisSession
|
@InvalidWayOfUsingAnalysisSession
|
||||||
final override fun getAnalysisSession(contextElement: KtElement, factory: ValidityTokenFactory): KtAnalysisSession {
|
final override fun getAnalysisSession(contextElement: KtElement, factory: ValidityTokenFactory): KtAnalysisSession {
|
||||||
val resolveState = getResolveState(contextElement)
|
val firResolveSession = getFirResolveSession(contextElement)
|
||||||
return cache.getAnalysisSession(resolveState to factory.identifier) {
|
return cache.getAnalysisSession(firResolveSession to factory.identifier) {
|
||||||
val validityToken = factory.create(project)
|
val validityToken = factory.create(project)
|
||||||
createAnalysisSession(resolveState, validityToken)
|
createAnalysisSession(firResolveSession, validityToken)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession {
|
final override fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession {
|
||||||
val resolveState = getResolveState(contextSymbol)
|
val firResolveSession = getFirResolveSession(contextSymbol)
|
||||||
val token = contextSymbol.token
|
val token = contextSymbol.token
|
||||||
return getCachedAnalysisSession(resolveState, token)
|
return getCachedAnalysisSession(firResolveSession, token)
|
||||||
?: createAnalysisSession(resolveState, contextSymbol.token)
|
?: createAnalysisSession(firResolveSession, contextSymbol.token)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCachedAnalysisSession(resolveState: State, token: ValidityToken): KtAnalysisSession? {
|
private fun getCachedAnalysisSession(firResolveSession: State, token: ValidityToken): KtAnalysisSession? {
|
||||||
return cache.getCachedAnalysisSession(resolveState to token::class)
|
return cache.getCachedAnalysisSession(firResolveSession to token::class)
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
|
|||||||
+4
-4
@@ -6,13 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.standalone;
|
package org.jetbrains.kotlin.analysis.api.standalone;
|
||||||
|
|
||||||
import com.intellij.mock.MockProject;
|
import com.intellij.mock.MockProject;
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveStateService;
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService;
|
||||||
|
|
||||||
class RegisterComponentService {
|
class RegisterComponentService {
|
||||||
static void registerLLFirResolveStateService(MockProject project) {
|
static void registerLLFirResolveSessionService(MockProject project) {
|
||||||
project.registerService(
|
project.registerService(
|
||||||
LLFirResolveStateService.class,
|
LLFirResolveSessionService.class,
|
||||||
new LLFirResolveStateService(project)
|
new LLFirResolveSessionService(project)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -74,7 +74,7 @@ public fun configureApplicationEnvironment(app: MockApplication) {
|
|||||||
* * [ClsJavaStubByVirtualFileCache]
|
* * [ClsJavaStubByVirtualFileCache]
|
||||||
* * [KotlinModificationTrackerFactory]
|
* * [KotlinModificationTrackerFactory]
|
||||||
* * [KotlinAnnotationsResolverFactory]
|
* * [KotlinAnnotationsResolverFactory]
|
||||||
* * [LLFirResolveStateService]
|
* * [LLfirResolveSessionService]
|
||||||
* * [FirSealedClassInheritorsProcessorFactory]
|
* * [FirSealedClassInheritorsProcessorFactory]
|
||||||
* * [KtModuleScopeProvider]
|
* * [KtModuleScopeProvider]
|
||||||
* * [ProjectStructureProvider]
|
* * [ProjectStructureProvider]
|
||||||
@@ -161,7 +161,7 @@ internal fun configureProjectEnvironment(
|
|||||||
KotlinStaticAnnotationsResolverFactory(ktFiles)
|
KotlinStaticAnnotationsResolverFactory(ktFiles)
|
||||||
)
|
)
|
||||||
|
|
||||||
RegisterComponentService.registerLLFirResolveStateService(project)
|
RegisterComponentService.registerLLFirResolveSessionService(project)
|
||||||
project.picoContainer.registerComponentInstance(
|
project.picoContainer.registerComponentInstance(
|
||||||
FirSealedClassInheritorsProcessorFactory::class.qualifiedName,
|
FirSealedClassInheritorsProcessorFactory::class.qualifiedName,
|
||||||
object : FirSealedClassInheritorsProcessorFactory() {
|
object : FirSealedClassInheritorsProcessorFactory() {
|
||||||
|
|||||||
+13
-13
@@ -9,11 +9,11 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
import com.intellij.psi.util.PsiModificationTracker
|
import com.intellij.psi.util.PsiModificationTracker
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirElementBuilder
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirElementBuilder
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.TowerProviderForElementForState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.TowerProviderForElementForState
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirScopeSessionProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirScopeSessionProvider
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
@@ -31,14 +31,14 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
internal class FirModuleResolveStateDepended(
|
internal class LLFirResolveSessionDepended(
|
||||||
val originalState: LLFirResolvableModuleResolveState,
|
val originalFirResolveSession: LLFirResolvableResolveSession,
|
||||||
val towerProviderBuiltUponElement: FirTowerContextProvider,
|
val towerProviderBuiltUponElement: FirTowerContextProvider,
|
||||||
private val ktToFirMapping: KtToFirMapping?,
|
private val ktToFirMapping: KtToFirMapping?,
|
||||||
) : LLFirModuleResolveState() {
|
) : LLFirResolveSession() {
|
||||||
override val project: Project get() = originalState.project
|
override val project: Project get() = originalFirResolveSession.project
|
||||||
override val useSiteKtModule: KtModule get() = originalState.useSiteKtModule
|
override val useSiteKtModule: KtModule get() = originalFirResolveSession.useSiteKtModule
|
||||||
override val useSiteFirSession get() = originalState.useSiteFirSession
|
override val useSiteFirSession get() = originalFirResolveSession.useSiteFirSession
|
||||||
|
|
||||||
private val scopeSessionProviderCache by softCachedValue(
|
private val scopeSessionProviderCache by softCachedValue(
|
||||||
project,
|
project,
|
||||||
@@ -55,19 +55,19 @@ internal class FirModuleResolveStateDepended(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getSessionFor(module: KtModule): FirSession =
|
override fun getSessionFor(module: KtModule): FirSession =
|
||||||
originalState.getSessionFor(module)
|
originalFirResolveSession.getSessionFor(module)
|
||||||
|
|
||||||
override fun getOrBuildFirFor(element: KtElement): FirElement? {
|
override fun getOrBuildFirFor(element: KtElement): FirElement? {
|
||||||
val psi = FirElementBuilder.getPsiAsFirElementSource(element) ?: return null
|
val psi = FirElementBuilder.getPsiAsFirElementSource(element) ?: return null
|
||||||
ktToFirMapping?.getFirOfClosestParent(psi, this)?.let { return it }
|
ktToFirMapping?.getFirOfClosestParent(psi, this)?.let { return it }
|
||||||
return originalState.getOrBuildFirFor(element = element)
|
return originalFirResolveSession.getOrBuildFirFor(element = element)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getOrBuildFirFile(ktFile: KtFile): FirFile =
|
override fun getOrBuildFirFile(ktFile: KtFile): FirFile =
|
||||||
originalState.getOrBuildFirFile(ktFile)
|
originalFirResolveSession.getOrBuildFirFile(ktFile)
|
||||||
|
|
||||||
override fun resolveFirToPhase(declaration: FirDeclaration, toPhase: FirResolvePhase) {
|
override fun resolveFirToPhase(declaration: FirDeclaration, toPhase: FirResolvePhase) {
|
||||||
originalState.resolveFirToPhase(declaration, toPhase)
|
originalFirResolveSession.resolveFirToPhase(declaration, toPhase)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> =
|
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> =
|
||||||
@@ -77,7 +77,7 @@ internal class FirModuleResolveStateDepended(
|
|||||||
TODO("Diagnostics are not implemented for depended state")
|
TODO("Diagnostics are not implemented for depended state")
|
||||||
|
|
||||||
override fun resolveToFirSymbol(ktDeclaration: KtDeclaration, phase: FirResolvePhase): FirBasedSymbol<*> {
|
override fun resolveToFirSymbol(ktDeclaration: KtDeclaration, phase: FirResolvePhase): FirBasedSymbol<*> {
|
||||||
return originalState.resolveToFirSymbol(ktDeclaration, phase)
|
return originalFirResolveSession.resolveToFirSymbol(ktDeclaration, phase)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTowerContextProvider(ktFile: KtFile): FirTowerContextProvider =
|
override fun getTowerContextProvider(ktFile: KtFile): FirTowerContextProvider =
|
||||||
+17
-17
@@ -9,12 +9,12 @@ import com.intellij.openapi.components.ServiceManager
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.*
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.*
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionProviderStorage
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionProviderStorage
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirLibraryOrLibrarySourceResolvableModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirLibraryOrLibrarySourceResolvableResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
@@ -23,33 +23,33 @@ import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModifi
|
|||||||
import org.jetbrains.kotlin.analysis.utils.caches.strongCachedValue
|
import org.jetbrains.kotlin.analysis.utils.caches.strongCachedValue
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
internal class LLFirResolveStateService(project: Project) {
|
internal class LLFirResolveSessionService(project: Project) {
|
||||||
private val sessionProviderStorage = LLFirSessionProviderStorage(project)
|
private val sessionProviderStorage = LLFirSessionProviderStorage(project)
|
||||||
|
|
||||||
private val stateCache by strongCachedValue(
|
private val stateCache by strongCachedValue(
|
||||||
project.createProjectWideOutOfBlockModificationTracker(),
|
project.createProjectWideOutOfBlockModificationTracker(),
|
||||||
ProjectRootModificationTracker.getInstance(project),
|
ProjectRootModificationTracker.getInstance(project),
|
||||||
) {
|
) {
|
||||||
ConcurrentHashMap<KtModule, LLFirResolvableModuleResolveState>()
|
ConcurrentHashMap<KtModule, LLFirResolvableResolveSession>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getResolveState(module: KtModule): LLFirResolvableModuleResolveState =
|
fun getFirResolveSession(module: KtModule): LLFirResolvableResolveSession =
|
||||||
stateCache.computeIfAbsent(module) { createResolveStateFor(module, sessionProviderStorage) }
|
stateCache.computeIfAbsent(module) { createFirResolveSessionFor(module, sessionProviderStorage) }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(project: Project): LLFirResolveStateService =
|
fun getInstance(project: Project): LLFirResolveSessionService =
|
||||||
ServiceManager.getService(project, LLFirResolveStateService::class.java)
|
ServiceManager.getService(project, LLFirResolveSessionService::class.java)
|
||||||
|
|
||||||
internal fun createResolveStateFor(
|
internal fun createFirResolveSessionFor(
|
||||||
useSiteKtModule: KtModule,
|
useSiteKtModule: KtModule,
|
||||||
sessionProviderStorage: LLFirSessionProviderStorage,
|
sessionProviderStorage: LLFirSessionProviderStorage,
|
||||||
configureSession: (LLFirSession.() -> Unit)? = null,
|
configureSession: (LLFirSession.() -> Unit)? = null,
|
||||||
): LLFirResolvableModuleResolveState {
|
): LLFirResolvableResolveSession {
|
||||||
val sessionProvider = sessionProviderStorage.getSessionProvider(useSiteKtModule, configureSession)
|
val sessionProvider = sessionProviderStorage.getSessionProvider(useSiteKtModule, configureSession)
|
||||||
val useSiteSession = sessionProvider.rootModuleSession
|
val useSiteSession = sessionProvider.rootModuleSession
|
||||||
return when (useSiteKtModule) {
|
return when (useSiteKtModule) {
|
||||||
is KtSourceModule -> {
|
is KtSourceModule -> {
|
||||||
LLFirSourceModuleResolveState(
|
LLFirSourceResolveSession(
|
||||||
useSiteSession.moduleComponents.globalResolveComponents,
|
useSiteSession.moduleComponents.globalResolveComponents,
|
||||||
sessionProviderStorage.project,
|
sessionProviderStorage.project,
|
||||||
useSiteKtModule,
|
useSiteKtModule,
|
||||||
@@ -57,7 +57,7 @@ internal class LLFirResolveStateService(project: Project) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
is KtLibraryModule, is KtLibrarySourceModule -> {
|
is KtLibraryModule, is KtLibrarySourceModule -> {
|
||||||
LLFirLibraryOrLibrarySourceResolvableModuleResolveState(
|
LLFirLibraryOrLibrarySourceResolvableResolveSession(
|
||||||
useSiteSession.moduleComponents.globalResolveComponents,
|
useSiteSession.moduleComponents.globalResolveComponents,
|
||||||
sessionProviderStorage.project,
|
sessionProviderStorage.project,
|
||||||
useSiteKtModule,
|
useSiteKtModule,
|
||||||
@@ -74,12 +74,12 @@ internal class LLFirResolveStateService(project: Project) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
fun createResolveStateForNoCaching(
|
fun createFirResolveSessionForNoCaching(
|
||||||
useSiteKtModule: KtModule,
|
useSiteKtModule: KtModule,
|
||||||
project: Project,
|
project: Project,
|
||||||
configureSession: (LLFirSession.() -> Unit)? = null,
|
configureSession: (LLFirSession.() -> Unit)? = null,
|
||||||
): LLFirModuleResolveState =
|
): LLFirResolveSession =
|
||||||
LLFirResolveStateService.createResolveStateFor(
|
LLFirResolveSessionService.createFirResolveSessionFor(
|
||||||
useSiteKtModule = useSiteKtModule,
|
useSiteKtModule = useSiteKtModule,
|
||||||
sessionProviderStorage = LLFirSessionProviderStorage(project),
|
sessionProviderStorage = LLFirSessionProviderStorage(project),
|
||||||
configureSession = configureSession
|
configureSession = configureSession
|
||||||
|
|||||||
+4
-1
@@ -20,7 +20,10 @@ import org.jetbrains.kotlin.psi.KtDeclaration
|
|||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
abstract class LLFirModuleResolveState {
|
/**
|
||||||
|
* An entry point for a FIR Low Level API resolution. Represents a project view from a use-site [KtModule].
|
||||||
|
*/
|
||||||
|
abstract class LLFirResolveSession {
|
||||||
abstract val project: Project
|
abstract val project: Project
|
||||||
|
|
||||||
abstract val useSiteFirSession: FirSession
|
abstract val useSiteFirSession: FirSession
|
||||||
+25
-25
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.api
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.api
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveStateService
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic
|
import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic
|
||||||
@@ -20,18 +20,18 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns [LLFirModuleResolveState] which corresponds to containing module
|
* Returns [LLFirResolveSession] which corresponds to containing module
|
||||||
*/
|
*/
|
||||||
fun KtElement.getResolveState(): LLFirModuleResolveState {
|
fun KtElement.getFirResolveSession(): LLFirResolveSession {
|
||||||
val project = project
|
val project = project
|
||||||
return getKtModule(project).getResolveState(project)
|
return getKtModule(project).getFirResolveSession(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns [LLFirModuleResolveState] which corresponds to containing module
|
* Returns [LLFirResolveSession] which corresponds to containing module
|
||||||
*/
|
*/
|
||||||
fun KtModule.getResolveState(project: Project): LLFirModuleResolveState =
|
fun KtModule.getFirResolveSession(project: Project): LLFirResolveSession =
|
||||||
LLFirResolveStateService.getInstance(project).getResolveState(this)
|
LLFirResolveSessionService.getInstance(project).getFirResolveSession(this)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,10 +40,10 @@ fun KtModule.getResolveState(project: Project): LLFirModuleResolveState =
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
fun KtDeclaration.resolveToFirSymbol(
|
fun KtDeclaration.resolveToFirSymbol(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||||
): FirBasedSymbol<*> {
|
): FirBasedSymbol<*> {
|
||||||
return resolveState.resolveToFirSymbol(this, phase)
|
return firResolveSession.resolveToFirSymbol(this, phase)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,10 +54,10 @@ fun KtDeclaration.resolveToFirSymbol(
|
|||||||
*/
|
*/
|
||||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||||
inline fun <reified S : FirBasedSymbol<*>> KtDeclaration.resolveToFirSymbolOfType(
|
inline fun <reified S : FirBasedSymbol<*>> KtDeclaration.resolveToFirSymbolOfType(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||||
): @kotlin.internal.NoInfer S {
|
): @kotlin.internal.NoInfer S {
|
||||||
val symbol = resolveToFirSymbol(resolveState, phase)
|
val symbol = resolveToFirSymbol(firResolveSession, phase)
|
||||||
if (symbol !is S) {
|
if (symbol !is S) {
|
||||||
throwUnexpectedFirElementError(symbol, this, S::class)
|
throwUnexpectedFirElementError(symbol, this, S::class)
|
||||||
}
|
}
|
||||||
@@ -72,10 +72,10 @@ inline fun <reified S : FirBasedSymbol<*>> KtDeclaration.resolveToFirSymbolOfTyp
|
|||||||
*/
|
*/
|
||||||
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||||
inline fun <reified S : FirBasedSymbol<*>> KtDeclaration.resolveToFirSymbolOfTypeSafe(
|
inline fun <reified S : FirBasedSymbol<*>> KtDeclaration.resolveToFirSymbolOfTypeSafe(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||||
): @kotlin.internal.NoInfer S? {
|
): @kotlin.internal.NoInfer S? {
|
||||||
return resolveToFirSymbol(resolveState, phase) as? S
|
return resolveToFirSymbol(firResolveSession, phase) as? S
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -83,18 +83,18 @@ inline fun <reified S : FirBasedSymbol<*>> KtDeclaration.resolveToFirSymbolOfTyp
|
|||||||
* Returns a list of Diagnostics compiler finds for given [KtElement]
|
* Returns a list of Diagnostics compiler finds for given [KtElement]
|
||||||
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
||||||
*/
|
*/
|
||||||
fun KtElement.getDiagnostics(resolveState: LLFirModuleResolveState, filter: DiagnosticCheckerFilter): Collection<KtPsiDiagnostic> =
|
fun KtElement.getDiagnostics(firResolveSession: LLFirResolveSession, filter: DiagnosticCheckerFilter): Collection<KtPsiDiagnostic> =
|
||||||
resolveState.getDiagnostics(this, filter)
|
firResolveSession.getDiagnostics(this, filter)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of Diagnostics compiler finds for given [KtFile]
|
* Returns a list of Diagnostics compiler finds for given [KtFile]
|
||||||
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
||||||
*/
|
*/
|
||||||
fun KtFile.collectDiagnosticsForFile(
|
fun KtFile.collectDiagnosticsForFile(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
filter: DiagnosticCheckerFilter
|
filter: DiagnosticCheckerFilter
|
||||||
): Collection<KtPsiDiagnostic> =
|
): Collection<KtPsiDiagnostic> =
|
||||||
resolveState.collectDiagnosticsForFile(this, filter)
|
firResolveSession.collectDiagnosticsForFile(this, filter)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a [FirElement] which was created by [KtElement]
|
* Get a [FirElement] which was created by [KtElement]
|
||||||
@@ -104,8 +104,8 @@ fun KtFile.collectDiagnosticsForFile(
|
|||||||
* The `null` value is returned iff FIR tree does not have corresponding element
|
* The `null` value is returned iff FIR tree does not have corresponding element
|
||||||
*/
|
*/
|
||||||
fun KtElement.getOrBuildFir(
|
fun KtElement.getOrBuildFir(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
): FirElement? = resolveState.getOrBuildFirFor(this)
|
): FirElement? = firResolveSession.getOrBuildFirFor(this)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a [FirElement] which was created by [KtElement], but only if it is subtype of [E], `null` otherwise
|
* Get a [FirElement] which was created by [KtElement], but only if it is subtype of [E], `null` otherwise
|
||||||
@@ -113,8 +113,8 @@ fun KtElement.getOrBuildFir(
|
|||||||
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
||||||
*/
|
*/
|
||||||
inline fun <reified E : FirElement> KtElement.getOrBuildFirSafe(
|
inline fun <reified E : FirElement> KtElement.getOrBuildFirSafe(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
) = getOrBuildFir(resolveState) as? E
|
) = getOrBuildFir(firResolveSession) as? E
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a [FirElement] which was created by [KtElement], but only if it is subtype of [E], throws [InvalidFirElementTypeException] otherwise
|
* Get a [FirElement] which was created by [KtElement], but only if it is subtype of [E], throws [InvalidFirElementTypeException] otherwise
|
||||||
@@ -122,9 +122,9 @@ inline fun <reified E : FirElement> KtElement.getOrBuildFirSafe(
|
|||||||
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
* This operation could be performance affective because it create FIleStructureElement and resolve non-local declaration into BODY phase
|
||||||
*/
|
*/
|
||||||
inline fun <reified E : FirElement> KtElement.getOrBuildFirOfType(
|
inline fun <reified E : FirElement> KtElement.getOrBuildFirOfType(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
): E {
|
): E {
|
||||||
val fir = this.getOrBuildFir(resolveState)
|
val fir = getOrBuildFir(firResolveSession)
|
||||||
if (fir is E) return fir
|
if (fir is E) return fir
|
||||||
throwUnexpectedFirElementError(fir, this, E::class)
|
throwUnexpectedFirElementError(fir, this, E::class)
|
||||||
}
|
}
|
||||||
@@ -133,5 +133,5 @@ inline fun <reified E : FirElement> KtElement.getOrBuildFirOfType(
|
|||||||
* Get a [FirFile] which was created by [KtElement]
|
* Get a [FirFile] which was created by [KtElement]
|
||||||
* Returned [FirFile] can be resolved to any phase from [FirResolvePhase.RAW_FIR] to [FirResolvePhase.BODY_RESOLVE]
|
* Returned [FirFile] can be resolved to any phase from [FirResolvePhase.RAW_FIR] to [FirResolvePhase.BODY_RESOLVE]
|
||||||
*/
|
*/
|
||||||
fun KtFile.getOrBuildFirFile(resolveState: LLFirModuleResolveState): FirFile =
|
fun KtFile.getOrBuildFirFile(firResolveSession: LLFirResolveSession): FirFile =
|
||||||
resolveState.getOrBuildFirFile(this)
|
firResolveSession.getOrBuildFirFile(this)
|
||||||
|
|||||||
+29
-29
@@ -9,7 +9,8 @@ import com.intellij.psi.util.PsiTreeUtil
|
|||||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.parentOfType
|
import org.jetbrains.kotlin.analysis.api.impl.barebone.parentOfType
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.parentsOfType
|
import org.jetbrains.kotlin.analysis.api.impl.barebone.parentsOfType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.DeclarationCopyBuilder.withBodyFrom
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.DeclarationCopyBuilder.withBodyFrom
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.FirModuleResolveStateDepended
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionDepended
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector
|
||||||
@@ -19,7 +20,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMap
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.*
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.*
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirResolvableModuleResolveState
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.originalDeclaration
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
@@ -64,15 +64,15 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <T : KtElement> onAirResolveElement(
|
fun <T : KtElement> onAirResolveElement(
|
||||||
state: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
place: T,
|
place: T,
|
||||||
elementToResolve: T,
|
elementToResolve: T,
|
||||||
): FirElement {
|
): FirElement {
|
||||||
require(state is LLFirResolvableModuleResolveState)
|
require(firResolveSession is LLFirResolvableResolveSession)
|
||||||
require(place.isPhysical)
|
require(place.isPhysical)
|
||||||
|
|
||||||
val declaration = runBodyResolveOnAir(
|
val declaration = runBodyResolveOnAir(
|
||||||
state = state,
|
firResolveSession = firResolveSession,
|
||||||
replacement = RawFirReplacement(place, elementToResolve),
|
replacement = RawFirReplacement(place, elementToResolve),
|
||||||
onAirCreatedDeclaration = true
|
onAirCreatedDeclaration = true
|
||||||
)
|
)
|
||||||
@@ -93,13 +93,13 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun onAirGetTowerContextProvider(
|
fun onAirGetTowerContextProvider(
|
||||||
state: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
place: KtElement,
|
place: KtElement,
|
||||||
): FirTowerContextProvider {
|
): FirTowerContextProvider {
|
||||||
require(state is LLFirResolvableModuleResolveState)
|
require(firResolveSession is LLFirResolvableResolveSession)
|
||||||
|
|
||||||
return if (place is KtFile) {
|
return if (place is KtFile) {
|
||||||
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
|
FileTowerProvider(place, onAirGetTowerContextForFile(firResolveSession, place))
|
||||||
} else {
|
} else {
|
||||||
val validPlace = PsiTreeUtil.findFirstParent(place, false) {
|
val validPlace = PsiTreeUtil.findFirstParent(place, false) {
|
||||||
RawFirReplacement.isApplicableForReplacement(it as KtElement)
|
RawFirReplacement.isApplicableForReplacement(it as KtElement)
|
||||||
@@ -107,7 +107,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
|
|
||||||
FirTowerDataContextAllElementsCollector().also {
|
FirTowerDataContextAllElementsCollector().also {
|
||||||
runBodyResolveOnAir(
|
runBodyResolveOnAir(
|
||||||
state = state,
|
firResolveSession = firResolveSession,
|
||||||
collector = it,
|
collector = it,
|
||||||
onAirCreatedDeclaration = false,
|
onAirCreatedDeclaration = false,
|
||||||
replacement = RawFirReplacement(validPlace, validPlace),
|
replacement = RawFirReplacement(validPlace, validPlace),
|
||||||
@@ -117,16 +117,16 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun onAirGetTowerContextForFile(
|
private fun onAirGetTowerContextForFile(
|
||||||
state: LLFirResolvableModuleResolveState,
|
firResolveSession: LLFirResolvableResolveSession,
|
||||||
file: KtFile,
|
file: KtFile,
|
||||||
): FirTowerDataContext {
|
): FirTowerDataContext {
|
||||||
require(file.isPhysical)
|
require(file.isPhysical)
|
||||||
val session = state.getSessionFor(file.getKtModule(state.project)) as LLFirResolvableModuleSession
|
val session = firResolveSession.getSessionFor(file.getKtModule(firResolveSession.project)) as LLFirResolvableModuleSession
|
||||||
val moduleComponents = session.moduleComponents
|
val moduleComponents = session.moduleComponents
|
||||||
|
|
||||||
val firFile = moduleComponents.firFileBuilder.buildRawFirFileWithCaching(file)
|
val firFile = moduleComponents.firFileBuilder.buildRawFirFileWithCaching(file)
|
||||||
|
|
||||||
val scopeSession = state.getScopeSessionFor(session)
|
val scopeSession = firResolveSession.getScopeSessionFor(session)
|
||||||
moduleComponents.lazyFirDeclarationsResolver.lazyResolveFileDeclaration(
|
moduleComponents.lazyFirDeclarationsResolver.lazyResolveFileDeclaration(
|
||||||
firFile = firFile,
|
firFile = firFile,
|
||||||
scopeSession = scopeSession,
|
scopeSession = scopeSession,
|
||||||
@@ -138,19 +138,19 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
return FirTowerDataContext().addNonLocalTowerDataElements(fileScopeElements)
|
return FirTowerDataContext().addNonLocalTowerDataElements(fileScopeElements)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getResolveStateForDependentCopy(
|
fun getFirResolveSessionForDependentCopy(
|
||||||
originalState: LLFirModuleResolveState,
|
originalFirResolveSession: LLFirResolveSession,
|
||||||
originalKtFile: KtFile,
|
originalKtFile: KtFile,
|
||||||
elementToAnalyze: KtElement
|
elementToAnalyze: KtElement
|
||||||
): LLFirModuleResolveState {
|
): LLFirResolveSession {
|
||||||
require(originalState is LLFirResolvableModuleResolveState)
|
require(originalFirResolveSession is LLFirResolvableResolveSession)
|
||||||
require(elementToAnalyze !is KtFile) { "KtFile for dependency element not supported" }
|
require(elementToAnalyze !is KtFile) { "KtFile for dependency element not supported" }
|
||||||
require(!elementToAnalyze.isPhysical) { "Depended state should be build only for non-physical elements" }
|
require(!elementToAnalyze.isPhysical) { "Depended session should be build only for non-physical elements" }
|
||||||
|
|
||||||
val dependencyNonLocalDeclaration = findEnclosingNonLocalDeclaration(elementToAnalyze)
|
val dependencyNonLocalDeclaration = findEnclosingNonLocalDeclaration(elementToAnalyze)
|
||||||
?: return FirModuleResolveStateDepended(
|
?: return LLFirResolveSessionDepended(
|
||||||
originalState,
|
originalFirResolveSession,
|
||||||
FileTowerProvider(elementToAnalyze.containingKtFile, onAirGetTowerContextForFile(originalState, originalKtFile)),
|
FileTowerProvider(elementToAnalyze.containingKtFile, onAirGetTowerContextForFile(originalFirResolveSession, originalKtFile)),
|
||||||
ktToFirMapping = null
|
ktToFirMapping = null
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -165,14 +165,14 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
|
|
||||||
val collector = FirTowerDataContextAllElementsCollector()
|
val collector = FirTowerDataContextAllElementsCollector()
|
||||||
val copiedFirDeclaration = runBodyResolveOnAir(
|
val copiedFirDeclaration = runBodyResolveOnAir(
|
||||||
originalState,
|
originalFirResolveSession,
|
||||||
replacement = RawFirReplacement(sameDeclarationInOriginalFile, dependencyNonLocalDeclaration),
|
replacement = RawFirReplacement(sameDeclarationInOriginalFile, dependencyNonLocalDeclaration),
|
||||||
onAirCreatedDeclaration = true,
|
onAirCreatedDeclaration = true,
|
||||||
collector = collector,
|
collector = collector,
|
||||||
)
|
)
|
||||||
|
|
||||||
val mapping = KtToFirMapping(copiedFirDeclaration, FirElementsRecorder())
|
val mapping = KtToFirMapping(copiedFirDeclaration, FirElementsRecorder())
|
||||||
return FirModuleResolveStateDepended(originalState, collector, mapping)
|
return LLFirResolveSessionDepended(originalFirResolveSession, collector, mapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryResolveAsFileAnnotation(
|
private fun tryResolveAsFileAnnotation(
|
||||||
@@ -202,13 +202,13 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun runBodyResolveOnAir(
|
private fun runBodyResolveOnAir(
|
||||||
state: LLFirResolvableModuleResolveState,
|
firResolveSession: LLFirResolvableResolveSession,
|
||||||
replacement: RawFirReplacement,
|
replacement: RawFirReplacement,
|
||||||
onAirCreatedDeclaration: Boolean,
|
onAirCreatedDeclaration: Boolean,
|
||||||
collector: FirTowerDataContextCollector? = null,
|
collector: FirTowerDataContextCollector? = null,
|
||||||
): FirElement {
|
): FirElement {
|
||||||
val nonLocalDeclaration = findEnclosingNonLocalDeclaration(replacement.from)
|
val nonLocalDeclaration = findEnclosingNonLocalDeclaration(replacement.from)
|
||||||
val originalFirFile = state.getOrBuildFirFile(replacement.from.containingKtFile)
|
val originalFirFile = firResolveSession.getOrBuildFirFile(replacement.from.containingKtFile)
|
||||||
|
|
||||||
if (nonLocalDeclaration == null) {
|
if (nonLocalDeclaration == null) {
|
||||||
//It is possible that it is file annotation is going to resolve
|
//It is possible that it is file annotation is going to resolve
|
||||||
@@ -225,7 +225,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val originalDeclaration = nonLocalDeclaration.getOrBuildFirOfType<FirDeclaration>(state)
|
val originalDeclaration = nonLocalDeclaration.getOrBuildFirOfType<FirDeclaration>(firResolveSession)
|
||||||
|
|
||||||
val originalDesignation = originalDeclaration.collectDesignation()
|
val originalDesignation = originalDeclaration.collectDesignation()
|
||||||
|
|
||||||
@@ -239,7 +239,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
|
|
||||||
val isInBodyReplacement = isInBodyReplacement(nonLocalDeclaration, replacement)
|
val isInBodyReplacement = isInBodyReplacement(nonLocalDeclaration, replacement)
|
||||||
|
|
||||||
return state.globalComponents.lockProvider.runCustomResolveUnderLock(originalFirFile, true) {
|
return firResolveSession.globalComponents.lockProvider.runCustomResolveUnderLock(originalFirFile, true) {
|
||||||
val copiedFirDeclaration = if (isInBodyReplacement) {
|
val copiedFirDeclaration = if (isInBodyReplacement) {
|
||||||
when (originalDeclaration) {
|
when (originalDeclaration) {
|
||||||
is FirSimpleFunction ->
|
is FirSimpleFunction ->
|
||||||
@@ -299,12 +299,12 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
fun onAirResolveTypeInPlace(
|
fun onAirResolveTypeInPlace(
|
||||||
place: KtElement,
|
place: KtElement,
|
||||||
typeReference: KtTypeReference,
|
typeReference: KtTypeReference,
|
||||||
state: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
): FirResolvedTypeRef {
|
): FirResolvedTypeRef {
|
||||||
val context = state.getTowerContextProvider(place.containingKtFile).getClosestAvailableParentContext(place)
|
val context = firResolveSession.getTowerContextProvider(place.containingKtFile).getClosestAvailableParentContext(place)
|
||||||
?: error("TowerContext not found for ${place.getElementTextInContext()}")
|
?: error("TowerContext not found for ${place.getElementTextInContext()}")
|
||||||
|
|
||||||
val session = state.useSiteFirSession
|
val session = firResolveSession.useSiteFirSession
|
||||||
val firTypeReference = buildFirUserTypeRef(
|
val firTypeReference = buildFirUserTypeRef(
|
||||||
typeReference = typeReference,
|
typeReference = typeReference,
|
||||||
session = session,
|
session = session,
|
||||||
|
|||||||
+6
-6
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveCompone
|
|||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FileStructureElement
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FileStructureElement
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.declarationCanBeLazilyResolved
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.declarationCanBeLazilyResolved
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getElementTextInContext
|
||||||
@@ -60,10 +60,10 @@ internal class FirElementBuilder(
|
|||||||
|
|
||||||
fun getOrBuildFirFor(
|
fun getOrBuildFirFor(
|
||||||
element: KtElement,
|
element: KtElement,
|
||||||
state: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
): FirElement? = when (element) {
|
): FirElement? = when (element) {
|
||||||
is KtFile -> getOrBuildFirForKtFile(element)
|
is KtFile -> getOrBuildFirForKtFile(element)
|
||||||
else -> getOrBuildFirForNonKtFileElement(element, state)
|
else -> getOrBuildFirForNonKtFileElement(element, firResolveSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getOrBuildFirForKtFile(ktFile: KtFile): FirFile {
|
private fun getOrBuildFirForKtFile(ktFile: KtFile): FirFile {
|
||||||
@@ -79,7 +79,7 @@ internal class FirElementBuilder(
|
|||||||
|
|
||||||
private fun getOrBuildFirForNonKtFileElement(
|
private fun getOrBuildFirForNonKtFileElement(
|
||||||
element: KtElement,
|
element: KtElement,
|
||||||
state: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
): FirElement? {
|
): FirElement? {
|
||||||
require(element !is KtFile)
|
require(element !is KtFile)
|
||||||
|
|
||||||
@@ -92,8 +92,8 @@ internal class FirElementBuilder(
|
|||||||
|
|
||||||
val mappings = fileStructure.getStructureElementFor(element).mappings
|
val mappings = fileStructure.getStructureElementFor(element).mappings
|
||||||
val psi = getPsiAsFirElementSource(element) ?: return null
|
val psi = getPsiAsFirElementSource(element) ?: return null
|
||||||
return mappings.getFirOfClosestParent(psi, state)
|
return mappings.getFirOfClosestParent(psi, firResolveSession)
|
||||||
?: state.getOrBuildFirFile(firFile)
|
?: firResolveSession.getOrBuildFirFile(firFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Belongs to a [org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState]
|
* Belongs to a [org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession]
|
||||||
*/
|
*/
|
||||||
internal class FileStructureCache(private val moduleResolveComponents: LLFirModuleResolveComponents) {
|
internal class FileStructureCache(private val moduleResolveComponents: LLFirModuleResolveComponents) {
|
||||||
private val cache = ConcurrentHashMap<KtFile, FileStructure>()
|
private val cache = ConcurrentHashMap<KtFile, FileStructure>()
|
||||||
|
|||||||
+5
-5
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignation
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignation
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.FileDiagnosticRetriever
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.FileDiagnosticRetriever
|
||||||
@@ -35,7 +35,7 @@ internal class KtToFirMapping(firElement: FirElement, recorder: FirElementsRecor
|
|||||||
private val mapping = FirElementsRecorder.recordElementsFrom(firElement, recorder)
|
private val mapping = FirElementsRecorder.recordElementsFrom(firElement, recorder)
|
||||||
private val userTypeMapping = ConcurrentHashMap<KtUserType, FirElement>()
|
private val userTypeMapping = ConcurrentHashMap<KtUserType, FirElement>()
|
||||||
|
|
||||||
fun getElement(ktElement: KtElement, state: LLFirModuleResolveState): FirElement? {
|
fun getElement(ktElement: KtElement, firResolveSession: LLFirResolveSession): FirElement? {
|
||||||
mapping[ktElement]?.let { return it }
|
mapping[ktElement]?.let { return it }
|
||||||
|
|
||||||
val userType = when (ktElement) {
|
val userType = when (ktElement) {
|
||||||
@@ -49,15 +49,15 @@ internal class KtToFirMapping(firElement: FirElement, recorder: FirElementsRecor
|
|||||||
|
|
||||||
return userTypeMapping.getOrPut(userType) {
|
return userTypeMapping.getOrPut(userType) {
|
||||||
val typeReference = KtPsiFactory(ktElement.project).createType(userType.text)
|
val typeReference = KtPsiFactory(ktElement.project).createType(userType.text)
|
||||||
LowLevelFirApiFacadeForResolveOnAir.onAirResolveTypeInPlace(ktElement, typeReference, state)
|
LowLevelFirApiFacadeForResolveOnAir.onAirResolveTypeInPlace(ktElement, typeReference, firResolveSession)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFirOfClosestParent(element: KtElement, state: LLFirModuleResolveState): FirElement? {
|
fun getFirOfClosestParent(element: KtElement, firResolveSession: LLFirResolveSession): FirElement? {
|
||||||
var current: PsiElement? = element
|
var current: PsiElement? = element
|
||||||
while (current != null && current !is KtFile) {
|
while (current != null && current !is KtFile) {
|
||||||
if (current is KtElement) {
|
if (current is KtElement) {
|
||||||
getElement(current, state)?.let { return it }
|
getElement(current, firResolveSession)?.let { return it }
|
||||||
}
|
}
|
||||||
current = current.parent
|
current = current.parent
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.providers
|
|||||||
|
|
||||||
import kotlinx.collections.immutable.PersistentList
|
import kotlinx.collections.immutable.PersistentList
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolver
|
import org.jetbrains.kotlin.analysis.providers.KotlinAnnotationsResolver
|
||||||
@@ -72,8 +72,8 @@ internal class LLFirIdePredicateBasedProvider(
|
|||||||
this !is KtProperty
|
this !is KtProperty
|
||||||
) return null
|
) return null
|
||||||
|
|
||||||
val resolveState = this.getResolveState()
|
val firResolveSession = this.getFirResolveSession()
|
||||||
return this.resolveToFirSymbol(resolveState).fir
|
return this.resolveToFirSymbol(firResolveSession).fir
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getOwnersOfDeclaration(declaration: FirDeclaration): List<FirBasedSymbol<*>>? {
|
override fun getOwnersOfDeclaration(declaration: FirDeclaration): List<FirBasedSymbol<*>>? {
|
||||||
|
|||||||
+7
-7
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.resolver
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.resolver
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.parentsOfType
|
import org.jetbrains.kotlin.analysis.api.impl.barebone.parentsOfType
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
@@ -24,14 +24,14 @@ class AllCandidatesResolver(firSession: FirSession) {
|
|||||||
private val resolutionContext = ResolutionContext(firSession, bodyResolveComponents, bodyResolveComponents.transformer.context)
|
private val resolutionContext = ResolutionContext(firSession, bodyResolveComponents, bodyResolveComponents.transformer.context)
|
||||||
|
|
||||||
fun getAllCandidates(
|
fun getAllCandidates(
|
||||||
resolveState: LLFirModuleResolveState,
|
firResolveSession: LLFirResolveSession,
|
||||||
functionCall: FirFunctionCall,
|
functionCall: FirFunctionCall,
|
||||||
calleeName: Name,
|
calleeName: Name,
|
||||||
element: KtElement
|
element: KtElement
|
||||||
): List<OverloadCandidate> {
|
): List<OverloadCandidate> {
|
||||||
initializeBodyResolveContext(resolveState, element)
|
initializeBodyResolveContext(firResolveSession, element)
|
||||||
|
|
||||||
val firFile = element.containingKtFile.getOrBuildFirFile(resolveState)
|
val firFile = element.containingKtFile.getOrBuildFirFile(firResolveSession)
|
||||||
return bodyResolveComponents.context.withFile(firFile, bodyResolveComponents) {
|
return bodyResolveComponents.context.withFile(firFile, bodyResolveComponents) {
|
||||||
bodyResolveComponents.callResolver.collectAllCandidates(
|
bodyResolveComponents.callResolver.collectAllCandidates(
|
||||||
functionCall,
|
functionCall,
|
||||||
@@ -43,12 +43,12 @@ class AllCandidatesResolver(firSession: FirSession) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(PrivateForInline::class, SymbolInternals::class)
|
@OptIn(PrivateForInline::class, SymbolInternals::class)
|
||||||
private fun initializeBodyResolveContext(resolveState: LLFirModuleResolveState, element: KtElement) {
|
private fun initializeBodyResolveContext(firResolveSession: LLFirResolveSession, element: KtElement) {
|
||||||
// Set up needed context to get all candidates.
|
// Set up needed context to get all candidates.
|
||||||
val towerContext = resolveState.getTowerContextProvider(element.containingKtFile).getClosestAvailableParentContext(element)
|
val towerContext = firResolveSession.getTowerContextProvider(element.containingKtFile).getClosestAvailableParentContext(element)
|
||||||
towerContext?.let { bodyResolveComponents.context.replaceTowerDataContext(it) }
|
towerContext?.let { bodyResolveComponents.context.replaceTowerDataContext(it) }
|
||||||
val containingDeclarations =
|
val containingDeclarations =
|
||||||
element.parentsOfType<KtDeclaration>().map { it.resolveToFirSymbol(resolveState).fir }.toList().asReversed()
|
element.parentsOfType<KtDeclaration>().map { it.resolveToFirSymbol(firResolveSession).fir }.toList().asReversed()
|
||||||
bodyResolveComponents.context.containers.addAll(containingDeclarations)
|
bodyResolveComponents.context.containers.addAll(containingDeclarations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -16,12 +16,12 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
|
|
||||||
internal class LLFirLibraryOrLibrarySourceResolvableModuleResolveState(
|
internal class LLFirLibraryOrLibrarySourceResolvableResolveSession(
|
||||||
override val globalComponents: LLFirGlobalResolveComponents,
|
override val globalComponents: LLFirGlobalResolveComponents,
|
||||||
override val project: Project,
|
override val project: Project,
|
||||||
override val useSiteKtModule: KtModule,
|
override val useSiteKtModule: KtModule,
|
||||||
sessionProvider: LLFirSessionProvider,
|
sessionProvider: LLFirSessionProvider,
|
||||||
) : LLFirResolvableModuleResolveState(sessionProvider) {
|
) : LLFirResolvableResolveSession(sessionProvider) {
|
||||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> =
|
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> =
|
||||||
emptyList()
|
emptyList()
|
||||||
|
|
||||||
+3
-3
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.state
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.firModuleData
|
||||||
@@ -34,9 +34,9 @@ import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
|||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
internal abstract class LLFirResolvableModuleResolveState(
|
internal abstract class LLFirResolvableResolveSession(
|
||||||
private val sessionProvider: LLFirSessionProvider,
|
private val sessionProvider: LLFirSessionProvider,
|
||||||
) : LLFirModuleResolveState() {
|
) : LLFirResolveSession() {
|
||||||
abstract val globalComponents: LLFirGlobalResolveComponents
|
abstract val globalComponents: LLFirGlobalResolveComponents
|
||||||
|
|
||||||
final override val useSiteFirSession = sessionProvider.rootModuleSession
|
final override val useSiteFirSession = sessionProvider.rootModuleSession
|
||||||
+2
-2
@@ -20,12 +20,12 @@ import org.jetbrains.kotlin.diagnostics.KtPsiDiagnostic
|
|||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
internal class LLFirSourceModuleResolveState(
|
internal class LLFirSourceResolveSession(
|
||||||
override val globalComponents: LLFirGlobalResolveComponents,
|
override val globalComponents: LLFirGlobalResolveComponents,
|
||||||
override val project: Project,
|
override val project: Project,
|
||||||
override val useSiteKtModule: KtModule,
|
override val useSiteKtModule: KtModule,
|
||||||
sessionProvider: LLFirSessionProvider,
|
sessionProvider: LLFirSessionProvider,
|
||||||
) : LLFirResolvableModuleResolveState(sessionProvider) {
|
) : LLFirResolvableResolveSession(sessionProvider) {
|
||||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> {
|
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<KtPsiDiagnostic> {
|
||||||
val moduleComponents = getModuleComponentsForElement(element)
|
val moduleComponents = getModuleComponentsForElement(element)
|
||||||
return moduleComponents.diagnosticsCollector.getDiagnosticsFor(element, filter)
|
return moduleComponents.diagnosticsCollector.getDiagnosticsFor(element, filter)
|
||||||
+7
-7
@@ -5,26 +5,26 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.state
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.state
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.FirModuleResolveStateDepended
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionDepended
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTowerDataContext
|
import org.jetbrains.kotlin.fir.declarations.FirTowerDataContext
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
|
|
||||||
internal class TowerProviderForElementForState(private val state: LLFirModuleResolveState) : FirTowerContextProvider {
|
internal class TowerProviderForElementForState(private val firResolveSession: LLFirResolveSession) : FirTowerContextProvider {
|
||||||
override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? {
|
override fun getClosestAvailableParentContext(ktElement: KtElement): FirTowerDataContext? {
|
||||||
if (state is FirModuleResolveStateDepended) {
|
if (firResolveSession is LLFirResolveSessionDepended) {
|
||||||
state.towerProviderBuiltUponElement
|
firResolveSession.towerProviderBuiltUponElement
|
||||||
.getClosestAvailableParentContext(ktElement)
|
.getClosestAvailableParentContext(ktElement)
|
||||||
?.let { return it }
|
?.let { return it }
|
||||||
|
|
||||||
return LowLevelFirApiFacadeForResolveOnAir
|
return LowLevelFirApiFacadeForResolveOnAir
|
||||||
.onAirGetTowerContextProvider(state.originalState, ktElement)
|
.onAirGetTowerContextProvider(firResolveSession.originalFirResolveSession, ktElement)
|
||||||
.getClosestAvailableParentContext(ktElement)
|
.getClosestAvailableParentContext(ktElement)
|
||||||
}
|
}
|
||||||
return LowLevelFirApiFacadeForResolveOnAir
|
return LowLevelFirApiFacadeForResolveOnAir
|
||||||
.onAirGetTowerContextProvider(state, ktElement)
|
.onAirGetTowerContextProvider(firResolveSession, ktElement)
|
||||||
.getClosestAvailableParentContext(ktElement)
|
.getClosestAvailableParentContext(ktElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -31,8 +31,8 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
||||||
resolveWithClearCaches(ktFile) { resolveState ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
val session = resolveState.useSiteFirSession
|
val session = firResolveSession.useSiteFirSession
|
||||||
val provider = session.kotlinScopeProvider
|
val provider = session.kotlinScopeProvider
|
||||||
|
|
||||||
val laziedFirFile = RawFirBuilder(
|
val laziedFirFile = RawFirBuilder(
|
||||||
|
|||||||
+8
-8
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir
|
package org.jetbrains.kotlin.analysis.low.level.api.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
@@ -53,23 +53,23 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle
|
|||||||
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
||||||
val rendererOption = FirRenderer.RenderMode.WithDeclarationAttributes.copy(renderDeclarationResolvePhase = true)
|
val rendererOption = FirRenderer.RenderMode.WithDeclarationAttributes.copy(renderDeclarationResolvePhase = true)
|
||||||
val resultBuilder = StringBuilder()
|
val resultBuilder = StringBuilder()
|
||||||
resolveWithClearCaches(ktFile) { firModuleResolveState ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
check(firModuleResolveState is LLFirSourceModuleResolveState)
|
check(firResolveSession is LLFirSourceResolveSession)
|
||||||
val declarationToResolve = firModuleResolveState
|
val declarationToResolve = firResolveSession
|
||||||
.getOrBuildFirFile(ktFile)
|
.getOrBuildFirFile(ktFile)
|
||||||
.findResolveMe()
|
.findResolveMe()
|
||||||
for (currentPhase in FirResolvePhase.values()) {
|
for (currentPhase in FirResolvePhase.values()) {
|
||||||
if (currentPhase == FirResolvePhase.SEALED_CLASS_INHERITORS) continue
|
if (currentPhase == FirResolvePhase.SEALED_CLASS_INHERITORS) continue
|
||||||
declarationToResolve.ensureResolved(currentPhase)
|
declarationToResolve.ensureResolved(currentPhase)
|
||||||
val firFile = firModuleResolveState.getOrBuildFirFile(ktFile)
|
val firFile = firResolveSession.getOrBuildFirFile(ktFile)
|
||||||
resultBuilder.append("\n${currentPhase.name}:\n")
|
resultBuilder.append("\n${currentPhase.name}:\n")
|
||||||
resultBuilder.append(firFile.render(rendererOption))
|
resultBuilder.append(firFile.render(rendererOption))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveWithClearCaches(ktFile) { firModuleResolveState ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
check(firModuleResolveState is LLFirSourceModuleResolveState)
|
check(firResolveSession is LLFirSourceResolveSession)
|
||||||
val firFile = firModuleResolveState.getOrBuildFirFile(ktFile)
|
val firFile = firResolveSession.getOrBuildFirFile(ktFile)
|
||||||
firFile.ensureResolved(FirResolvePhase.BODY_RESOLVE)
|
firFile.ensureResolved(FirResolvePhase.BODY_RESOLVE)
|
||||||
resultBuilder.append("\nFILE RAW TO BODY:\n")
|
resultBuilder.append("\nFILE RAW TO BODY:\n")
|
||||||
resultBuilder.append(firFile.render(rendererOption))
|
resultBuilder.append(firFile.render(rendererOption))
|
||||||
|
|||||||
+4
-4
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir
|
package org.jetbrains.kotlin.analysis.low.level.api.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
@@ -32,9 +32,9 @@ abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest()
|
|||||||
|
|
||||||
check(place::class == onAir::class)
|
check(place::class == onAir::class)
|
||||||
|
|
||||||
resolveWithClearCaches(ktFile) { resolveState ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
check(resolveState is LLFirSourceModuleResolveState)
|
check(firResolveSession is LLFirSourceResolveSession)
|
||||||
val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(resolveState, place, onAir)
|
val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(firResolveSession, place, onAir)
|
||||||
val rendered = firElement.render(FirRenderer.RenderMode.WithResolvePhases)
|
val rendered = firElement.render(FirRenderer.RenderMode.WithResolvePhases)
|
||||||
testServices.assertions.assertEqualsToTestDataFileSibling(rendered)
|
testServices.assertions.assertEqualsToTestDataFileSibling(rendered)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.createResolveStateForNoCaching
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.createFirResolveSessionForNoCaching
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformer
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformer
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.AbstractCompilerBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.AbstractCompilerBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.registerAnalysisApiBaseTestServices
|
import org.jetbrains.kotlin.analysis.test.framework.base.registerAnalysisApiBaseTestServices
|
||||||
@@ -67,21 +67,21 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
|
|||||||
val ktModule = moduleInfoProvider.getModule(module.name) as KtSourceModuleByCompilerConfiguration
|
val ktModule = moduleInfoProvider.getModule(module.name) as KtSourceModuleByCompilerConfiguration
|
||||||
|
|
||||||
val project = testServices.compilerConfigurationProvider.getProject(module)
|
val project = testServices.compilerConfigurationProvider.getProject(module)
|
||||||
val resolveState = createResolveStateForNoCaching(ktModule, project)
|
val firResolveSession = createFirResolveSessionForNoCaching(ktModule, project)
|
||||||
|
|
||||||
val allFirFiles =
|
val allFirFiles =
|
||||||
module.files.filter { it.isKtFile }.zip(
|
module.files.filter { it.isKtFile }.zip(
|
||||||
ktModule.psiFiles
|
ktModule.psiFiles
|
||||||
.filterIsInstance<KtFile>()
|
.filterIsInstance<KtFile>()
|
||||||
.map { psiFile -> psiFile.getOrBuildFirFile(resolveState) }
|
.map { psiFile -> psiFile.getOrBuildFirFile(firResolveSession) }
|
||||||
)
|
)
|
||||||
|
|
||||||
val diagnosticCheckerFilter = if (FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS in module.directives) {
|
val diagnosticCheckerFilter = if (FirDiagnosticsDirectives.WITH_EXTENDED_CHECKERS in module.directives) {
|
||||||
DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS
|
DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS
|
||||||
} else DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS
|
} else DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS
|
||||||
|
|
||||||
val analyzerFacade = LowLevelFirAnalyzerFacade(resolveState, allFirFiles.toMap(), diagnosticCheckerFilter)
|
val analyzerFacade = LowLevelFirAnalyzerFacade(firResolveSession, allFirFiles.toMap(), diagnosticCheckerFilter)
|
||||||
return LowLevelFirOutputArtifact(resolveState.useSiteFirSession, analyzerFacade)
|
return LowLevelFirOutputArtifact(firResolveSession.useSiteFirSession, analyzerFacade)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile
|
||||||
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
|
import org.jetbrains.kotlin.diagnostics.KtDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.AbstractFirAnalyzerFacade
|
import org.jetbrains.kotlin.fir.AbstractFirAnalyzerFacade
|
||||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions
|
|||||||
import org.jetbrains.kotlin.test.model.TestFile
|
import org.jetbrains.kotlin.test.model.TestFile
|
||||||
|
|
||||||
class LowLevelFirAnalyzerFacade(
|
class LowLevelFirAnalyzerFacade(
|
||||||
val resolveState: LLFirModuleResolveState,
|
val firResolveSession: LLFirResolveSession,
|
||||||
val allFirFiles: Map<TestFile, FirFile>,
|
val allFirFiles: Map<TestFile, FirFile>,
|
||||||
private val diagnosticCheckerFilter: DiagnosticCheckerFilter,
|
private val diagnosticCheckerFilter: DiagnosticCheckerFilter,
|
||||||
) : AbstractFirAnalyzerFacade() {
|
) : AbstractFirAnalyzerFacade() {
|
||||||
@@ -33,7 +33,7 @@ class LowLevelFirAnalyzerFacade(
|
|||||||
findSealedInheritors()
|
findSealedInheritors()
|
||||||
return allFirFiles.values.associateWith { firFile ->
|
return allFirFiles.values.associateWith { firFile ->
|
||||||
val ktFile = firFile.psi as KtFile
|
val ktFile = firFile.psi as KtFile
|
||||||
val diagnostics = ktFile.collectDiagnosticsForFile(resolveState, diagnosticCheckerFilter)
|
val diagnostics = ktFile.collectDiagnosticsForFile(firResolveSession, diagnosticCheckerFilter)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
diagnostics.toList() as List<KtDiagnostic>
|
diagnostics.toList() as List<KtDiagnostic>
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
@@ -41,8 +41,8 @@ class SealedClassesInheritorsCaclulatorPreAnalysisHandler(
|
|||||||
val allFirFiles = mutableListOf<FirFile>()
|
val allFirFiles = mutableListOf<FirFile>()
|
||||||
ktFiles.forEach { ktFile ->
|
ktFiles.forEach { ktFile ->
|
||||||
val ktModule = ktModuleProvider.getKtModuleForKtElement(ktFile)
|
val ktModule = ktModuleProvider.getKtModuleForKtElement(ktFile)
|
||||||
val resolveState = ktModule.getResolveState(project)
|
val firResolveSession = ktModule.getFirResolveSession(project)
|
||||||
allFirFiles.add(ktFile.getOrBuildFirFile(resolveState))
|
allFirFiles.add(ktFile.getOrBuildFirFile(firResolveSession))
|
||||||
}
|
}
|
||||||
allFirFiles.groupBy { it.moduleData.session }.forEach { (session, firFiles) ->
|
allFirFiles.groupBy { it.moduleData.session }.forEach { (session, firFiles) ->
|
||||||
for (firFile in firFiles) {
|
for (firFile in firFiles) {
|
||||||
|
|||||||
+3
-3
@@ -41,11 +41,11 @@ abstract class AbstractDiagnosticTraversalCounterTest : AbstractLowLevelApiSing
|
|||||||
@OptIn(SessionConfiguration::class)
|
@OptIn(SessionConfiguration::class)
|
||||||
register(BeforeElementDiagnosticCollectionHandler::class, handler)
|
register(BeforeElementDiagnosticCollectionHandler::class, handler)
|
||||||
}
|
}
|
||||||
) { resolveState ->
|
) { firResolveSession ->
|
||||||
// we should get diagnostics before we resolve the whole file by ktFile.getOrBuildFir
|
// we should get diagnostics before we resolve the whole file by ktFile.getOrBuildFir
|
||||||
ktFile.collectDiagnosticsForFile(resolveState, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS)
|
ktFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS)
|
||||||
|
|
||||||
val firFile = ktFile.getOrBuildFirOfType<FirFile>(resolveState)
|
val firFile = ktFile.getOrBuildFirOfType<FirFile>(firResolveSession)
|
||||||
|
|
||||||
val errorElements = collectErrorElements(firFile, handler)
|
val errorElements = collectErrorElements(firFile, handler)
|
||||||
|
|
||||||
|
|||||||
+6
-7
@@ -11,11 +11,10 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack
|
import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack
|
||||||
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
|
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getDiagnostics
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getDiagnostics
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getResolveState
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.BeforeElementDiagnosticCollectionHandler
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.BeforeElementDiagnosticCollectionHandler
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir.PersistenceContextCollector
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir.PersistenceContextCollector
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FileStructureElement
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.FileStructureElement
|
||||||
@@ -43,19 +42,19 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT
|
|||||||
@OptIn(SessionConfiguration::class)
|
@OptIn(SessionConfiguration::class)
|
||||||
register(BeforeElementDiagnosticCollectionHandler::class, handler)
|
register(BeforeElementDiagnosticCollectionHandler::class, handler)
|
||||||
}
|
}
|
||||||
) { resolveState ->
|
) { firResolveSession ->
|
||||||
check(resolveState is LLFirSourceModuleResolveState)
|
check(firResolveSession is LLFirSourceResolveSession)
|
||||||
|
|
||||||
val session = resolveState.getSessionFor(ktFile.getKtModule()) as LLFirResolvableModuleSession
|
val session = firResolveSession.getSessionFor(ktFile.getKtModule()) as LLFirResolvableModuleSession
|
||||||
val fileStructureCache = session.moduleComponents.fileStructureCache
|
val fileStructureCache = session.moduleComponents.fileStructureCache
|
||||||
|
|
||||||
val fileStructure = fileStructureCache.getFileStructure(ktFile)
|
val fileStructure = fileStructureCache.getFileStructure(ktFile)
|
||||||
val allStructureElements = fileStructure.getAllStructureElements()
|
val allStructureElements = fileStructure.getAllStructureElements()
|
||||||
|
|
||||||
handler.elementsToCheckContext = allStructureElements.map { it.getFirDeclaration() }
|
handler.elementsToCheckContext = allStructureElements.map { it.getFirDeclaration() }
|
||||||
handler.firFile = ktFile.getOrBuildFirFile(resolveState)
|
handler.firFile = ktFile.getOrBuildFirFile(firResolveSession)
|
||||||
|
|
||||||
ktFile.getDiagnostics(resolveState, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS)
|
ktFile.getDiagnostics(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -9,8 +9,8 @@ import com.intellij.psi.PsiComment
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import com.intellij.psi.impl.source.tree.LeafPsiElement
|
import com.intellij.psi.impl.source.tree.LeafPsiElement
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
@@ -87,8 +87,8 @@ abstract class AbstractFileStructureTest : AbstractLowLevelApiSingleFileTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun KtFile.getFileStructure(): FileStructure {
|
private fun KtFile.getFileStructure(): FileStructure {
|
||||||
val moduleResolveState = getResolveState() as LLFirSourceModuleResolveState
|
val moduleFirResolveSession = getFirResolveSession() as LLFirSourceResolveSession
|
||||||
val session = moduleResolveState.getSessionFor(getKtModule()) as LLFirResolvableModuleSession
|
val session = moduleFirResolveSession.getSessionFor(getKtModule()) as LLFirResolvableModuleSession
|
||||||
return session.moduleComponents.fileStructureCache.getFileStructure(this)
|
return session.moduleComponents.fileStructureCache.getFileStructure(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirModuleResolveState
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -37,9 +37,9 @@ internal fun FirDeclaration.name(): String = symbol.name()
|
|||||||
internal inline fun <R> resolveWithClearCaches(
|
internal inline fun <R> resolveWithClearCaches(
|
||||||
context: KtElement,
|
context: KtElement,
|
||||||
noinline configureSession: LLFirSession.() -> Unit = {},
|
noinline configureSession: LLFirSession.() -> Unit = {},
|
||||||
action: (LLFirModuleResolveState) -> R,
|
action: (LLFirResolveSession) -> R,
|
||||||
): R {
|
): R {
|
||||||
val project = context.project
|
val project = context.project
|
||||||
val resolveState = createResolveStateForNoCaching(context.getKtModule(project), project, configureSession)
|
val firResolveSession = createFirResolveSessionForNoCaching(context.getKtModule(project), project, configureSession)
|
||||||
return action(resolveState)
|
return action(firResolveSession)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.test.services.assertions
|
|||||||
|
|
||||||
abstract class AbstractInnerDeclarationsResolvePhaseTest : AbstractLowLevelApiSingleFileTest() {
|
abstract class AbstractInnerDeclarationsResolvePhaseTest : AbstractLowLevelApiSingleFileTest() {
|
||||||
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
|
||||||
resolveWithClearCaches(ktFile) { resolveState ->
|
resolveWithClearCaches(ktFile) { firResolveSession ->
|
||||||
val firFile = ktFile.getOrBuildFirOfType<FirFile>(resolveState)
|
val firFile = ktFile.getOrBuildFirOfType<FirFile>(firResolveSession)
|
||||||
val actual = firFile.render(FirRenderer.RenderMode.WithResolvePhases)
|
val actual = firFile.render(FirRenderer.RenderMode.WithResolvePhases)
|
||||||
testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".fir.txt")
|
testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".fir.txt")
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import com.intellij.psi.impl.PsiElementFinderImpl
|
|||||||
import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider
|
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveStateService
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLFirSealedClassInheritorsProcessorFactoryForTests
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLFirSealedClassInheritorsProcessorFactoryForTests
|
||||||
@@ -41,7 +41,7 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
|||||||
project.apply {
|
project.apply {
|
||||||
registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this))
|
registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this))
|
||||||
registerService(FirSealedClassInheritorsProcessorFactory::class.java, LLFirSealedClassInheritorsProcessorFactoryForTests())
|
registerService(FirSealedClassInheritorsProcessorFactory::class.java, LLFirSealedClassInheritorsProcessorFactoryForTests())
|
||||||
registerService(LLFirResolveStateService::class.java)
|
registerService(LLFirResolveSessionService::class.java)
|
||||||
registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices))
|
registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices))
|
||||||
|
|
||||||
registerService(SymbolLightClassFacadeCache::class.java)
|
registerService(SymbolLightClassFacadeCache::class.java)
|
||||||
|
|||||||
Reference in New Issue
Block a user