diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt index fb55da378f4..94da7030fd2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt @@ -31,7 +31,6 @@ private constructor( val firResolveState: FirModuleResolveState, internal val firSymbolBuilder: KtSymbolByFirBuilder, token: ValidityToken, - element: KtElement, private val mode: AnalysisSessionMode, ) : KtAnalysisSession(token) { @@ -110,7 +109,6 @@ private constructor( contextResolveState, firSymbolBuilder.createReadOnlyCopy(contextResolveState), token, - originalKtFile, AnalysisSessionMode.DEPENDENT_COPY ) } @@ -118,15 +116,12 @@ private constructor( val rootModuleSession: FirSession get() = firResolveState.rootModuleSession val firSymbolProvider: FirSymbolProvider get() = rootModuleSession.symbolProvider val targetPlatform: TargetPlatform get() = rootModuleSession.moduleData.platform - val searchScope: GlobalSearchScope = element.resolveScope//todo companion object { @InvalidWayOfUsingAnalysisSession - @Deprecated("Please use org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProviderKt.analyze") internal fun createAnalysisSessionByResolveState( firResolveState: FirModuleResolveState, token: ValidityToken, - element: KtElement, ): KtFirAnalysisSession { val project = firResolveState.project val firSymbolBuilder = KtSymbolByFirBuilder( @@ -139,7 +134,6 @@ private constructor( firResolveState, firSymbolBuilder, token, - element, AnalysisSessionMode.REGULAR, ) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt index c1ffeaa5c27..789e8826eb9 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt @@ -30,9 +30,10 @@ class KtFirAnalysisSessionProvider(project: Project) : CachingKtAnalysisSessionP override fun createAnalysisSession( resolveState: FirModuleResolveState, validityToken: ValidityToken, - contextElement: KtElement ): KtAnalysisSession { @Suppress("DEPRECATION") - return KtFirAnalysisSession.createAnalysisSessionByResolveState(resolveState, validityToken, contextElement) + return KtFirAnalysisSession.createAnalysisSessionByResolveState(resolveState, validityToken) } -} \ No newline at end of file +} + + diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt index 1324d201776..c1354b6d2ed 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirScopeProvider.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.api.fir.components import com.intellij.openapi.project.Project +import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase @@ -212,7 +213,7 @@ internal class KtFirScopeProvider( project, builder, token, - analysisSession.searchScope, + GlobalSearchScope.allScope(project), // todo analysisSession.targetPlatform ) is FirContainingNamesAwareScope -> KtFirDelegatingScopeImpl(firScope, builder, token) diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/CachingKtAnalysisSessionProvider.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/CachingKtAnalysisSessionProvider.kt index 86f978c114c..d0b57a4b790 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/CachingKtAnalysisSessionProvider.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/CachingKtAnalysisSessionProvider.kt @@ -33,7 +33,6 @@ abstract class CachingKtAnalysisSessionProvider(private val project protected abstract fun createAnalysisSession( resolveState: State, validityToken: ValidityToken, - contextElement: KtElement ): KtAnalysisSession @InvalidWayOfUsingAnalysisSession @@ -41,7 +40,7 @@ abstract class CachingKtAnalysisSessionProvider(private val project val resolveState = getResolveState(contextElement) return cache.getAnalysisSession(resolveState to factory.identifier) { val validityToken = factory.create(project) - createAnalysisSession(resolveState, validityToken, contextElement) + createAnalysisSession(resolveState, validityToken) } } @@ -49,7 +48,7 @@ abstract class CachingKtAnalysisSessionProvider(private val project val resolveState = getResolveState(contextSymbol) val token = contextSymbol.token return getCachedAnalysisSession(resolveState, token) - ?: error("analysis session was not found for ${contextSymbol::class}, symbol.isValid=${contextSymbol.isValid()}") + ?: createAnalysisSession(resolveState, contextSymbol.token) } private fun getCachedAnalysisSession(resolveState: State, token: ValidityToken): KtAnalysisSession? { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/AlwaysAccessibleValidityToken.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/AlwaysAccessibleValidityToken.kt index 01dfac006d2..41454769894 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/AlwaysAccessibleValidityToken.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/AlwaysAccessibleValidityToken.kt @@ -29,6 +29,8 @@ public class AlwaysAccessibleValidityToken(project: Project) : ValidityToken() { override fun getInaccessibilityReason(): String { error("Getting inaccessibility reason for validity token when it is accessible") } + + override val factory: ValidityTokenFactory = AlwaysAccessibleValidityTokenFactory } public object AlwaysAccessibleValidityTokenFactory : ValidityTokenFactory() { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ReadActionConfinementValidityToken.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ReadActionConfinementValidityToken.kt index eb7d40fb546..1a743af5efb 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ReadActionConfinementValidityToken.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ReadActionConfinementValidityToken.kt @@ -52,6 +52,8 @@ public class ReadActionConfinementValidityToken(project: Project) : ValidityToke @HackToForceAllowRunningAnalyzeOnEDT public val allowOnEdt: ThreadLocal = ThreadLocal.withInitial { false } } + + public override val factory: ValidityTokenFactory = ReadActionConfinementValidityTokenFactory } public object ReadActionConfinementValidityTokenFactory : ValidityTokenFactory() { @@ -70,6 +72,7 @@ public object ReadActionConfinementValidityTokenFactory : ValidityTokenFactory() private val currentAnalysisContextEnteringCount = ThreadLocal.withInitial { 0 } internal fun isInsideAnalysisContext() = currentAnalysisContextEnteringCount.get() > 0 + } @RequiresOptIn("All frontend related work should not be allowed to be ran from EDT thread. Only use it as a temporary solution") diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ValidityToken.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ValidityToken.kt index c6317fdf6e4..3c5cd2f2ea8 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ValidityToken.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/tokens/ValidityToken.kt @@ -14,6 +14,8 @@ public abstract class ValidityToken { public abstract fun isAccessible(): Boolean public abstract fun getInaccessibilityReason(): String + + public abstract val factory: ValidityTokenFactory } public abstract class ValidityTokenFactory {