diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt index a142e5b163a..5c96d5f1a90 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.idea.frontend.api -import com.intellij.openapi.project.Project import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeProvider import org.jetbrains.kotlin.idea.frontend.api.symbols.* @@ -13,11 +12,7 @@ import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.* -abstract class KtAnalysisSession(project: Project) : ValidityOwner { - protected open val validityToken = ReadActionConfinementValidityToken(project) - override fun isValid(): Boolean = validityToken.isValid() - override fun invalidationReason(): String = validityToken.invalidationReason() - +abstract class KtAnalysisSession(override val token: ValidityToken) : ValidityTokenOwner { abstract val symbolProvider: KtSymbolProvider abstract val scopeProvider: KtScopeProvider diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityOwner.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ReadActionConfinementValidityToken.kt similarity index 64% rename from idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityOwner.kt rename to idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ReadActionConfinementValidityToken.kt index 436cc453006..4753f4cf1a4 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityOwner.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ReadActionConfinementValidityToken.kt @@ -9,33 +9,10 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.project.Project import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService -interface ValidityOwner { - fun isValid(): Boolean - - fun invalidationReason(): String -} - -@Suppress("NOTHING_TO_INLINE") -inline fun ValidityOwner.assertIsValid() { - assert(isValid()) { "Access to invalid $this, invalidation reason is ${invalidationReason()}" } -} - -inline fun ValidityOwner.withValidityAssertion(action: () -> R): R { - assertIsValid() - return action() -} - -interface ValidityOwnerByValidityToken : ValidityOwner { - val token: ValidityOwner - override fun isValid(): Boolean = token.isValid() - override fun invalidationReason(): String = token.invalidationReason() -} - -class ReadActionConfinementValidityToken(project: Project) : ValidityOwner { +class ReadActionConfinementValidityToken(project: Project) : ValidityToken() { private val modificationTracker = KotlinModificationTrackerService.getInstance(project).modificationTracker private val onCreatedTimeStamp = modificationTracker.modificationCount - override fun isValid(): Boolean { val application = ApplicationManager.getApplication() if (application.isDispatchThread) return false @@ -43,11 +20,11 @@ class ReadActionConfinementValidityToken(project: Project) : ValidityOwner { return onCreatedTimeStamp == modificationTracker.modificationCount } - override fun invalidationReason(): String { + override fun getInvalidationReason(): String { val application = ApplicationManager.getApplication() if (application.isDispatchThread) return "Called in EDT thread" if (!application.isReadAccessAllowed) return "Called outside read action" if (onCreatedTimeStamp != modificationTracker.modificationCount) return "PSI has changed since creation" - error("Getting invalidation reason for valid invalidatable") + error("Getting invalidation reason for valid validity token") } } \ No newline at end of file diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityToken.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityToken.kt new file mode 100644 index 00000000000..69f23509aa7 --- /dev/null +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityToken.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.frontend.api + +abstract class ValidityToken { + abstract fun isValid(): Boolean + abstract fun getInvalidationReason(): String +} + +@Suppress("NOTHING_TO_INLINE") +inline fun ValidityToken.assertIsValid() { + if (!isValid()) { + throw InvalidEntityAccessException("Access to invalid $this, invalidation reason is ${getInvalidationReason()}") + } +} + +class InvalidEntityAccessException(override val message: String): IllegalStateException() + diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityTokenOwner.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityTokenOwner.kt new file mode 100644 index 00000000000..cdd9c6f54a4 --- /dev/null +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/ValidityTokenOwner.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.frontend.api + +interface ValidityTokenOwner { + val token: ValidityToken +} + +@Suppress("NOTHING_TO_INLINE") +inline fun ValidityTokenOwner.assertIsValid() { + token.assertIsValid() +} + +inline fun ValidityTokenOwner.withValidityAssertion(action: () -> R): R { + assertIsValid() + return action() +} \ No newline at end of file diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt index 7a95d090047..3f83eabeade 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt @@ -5,11 +5,11 @@ package org.jetbrains.kotlin.idea.frontend.api.scopes -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.name.Name -interface KtScope : ValidityOwner { +interface KtScope : ValidityTokenOwner { // TODO check that names are accessible // maybe return some kind of lazy set fun getAllNames(): Set diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScopeProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScopeProvider.kt index b039f2d9254..44ac3377cf7 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScopeProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScopeProvider.kt @@ -5,14 +5,14 @@ package org.jetbrains.kotlin.idea.frontend.api.scopes -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile -abstract class KtScopeProvider : ValidityOwner { +abstract class KtScopeProvider : ValidityTokenOwner { abstract fun getMemberScope(classSymbol: KtClassOrObjectSymbol): KtMemberScope abstract fun getDeclaredMemberScope(classSymbol: KtClassOrObjectSymbol): KtDeclaredMemberScope abstract fun getPackageScope(packageSymbol: KtPackageSymbol): KtPackageScope diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbol.kt index e923ea4038c..b9b85e01bd5 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbol.kt @@ -6,9 +6,9 @@ package org.jetbrains.kotlin.idea.frontend.api.symbols import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner -interface KtSymbol : ValidityOwner { +interface KtSymbol : ValidityTokenOwner { val origin: KtSymbolOrigin val psi: PsiElement? diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt index 48ae39a9dbc..4d0c1ac403e 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt @@ -5,13 +5,13 @@ package org.jetbrains.kotlin.idea.frontend.api.symbols -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -abstract class KtSymbolProvider : ValidityOwner { +abstract class KtSymbolProvider : ValidityTokenOwner { open fun getSymbol(psi: KtDeclaration): KtSymbol = when (psi) { is KtParameter -> getParameterSymbol(psi) is KtNamedFunction -> getFunctionSymbol(psi) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt index dbc4ad51acb..58795f5619e 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/types/KtType.kt @@ -6,13 +6,13 @@ package org.jetbrains.kotlin.idea.frontend.api.types import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgument -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name -interface KtType : ValidityOwner { +interface KtType : ValidityTokenOwner { fun isEqualTo(other: KtType): Boolean fun isSubTypeOf(superType: KtType): Boolean diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt index b7ca03f7e14..13c63c5c714 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol @@ -20,8 +20,8 @@ import org.jetbrains.kotlin.name.Name @OptIn(ExperimentalStdlibApi::class) class KtFirCompositeScope( override val subScopes: List, - override val token: ValidityOwner -) : KtCompositeScope, ValidityOwnerByValidityToken { + override val token: ValidityToken +) : KtCompositeScope, ValidityTokenOwner { override fun getAllNames(): Set = withValidityAssertion { buildSet { subScopes.flatMapTo(this) { it.getAllNames() } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDeclaredMemberScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDeclaredMemberScope.kt index df8164fbb27..6700cba5878 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDeclaredMemberScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDeclaredMemberScope.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef @@ -17,12 +17,12 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtUnsubstitutedScope internal class KtFirDeclaredMemberScope( override val owner: KtFirClassOrObjectSymbol, - override val token: ValidityOwner, + token: ValidityToken, builder: KtSymbolByFirBuilder -) : KtFirDelegatingScope(builder), +) : KtFirDelegatingScope(builder, token), KtDeclaredMemberScope, KtUnsubstitutedScope, - ValidityOwnerByValidityToken { + ValidityTokenOwner { override val firScope: FirScope by weakRef(declaredMemberScope(owner.fir)) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt index 84ae931c147..a2b33fbc481 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt @@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope @@ -23,7 +25,11 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.Name -internal abstract class KtFirDelegatingScope(private val builder: KtSymbolByFirBuilder) : KtScope, ValidityOwnerByValidityToken { +internal abstract class KtFirDelegatingScope( + private val builder: KtSymbolByFirBuilder, + override val token: ValidityToken +) : KtScope, ValidityTokenOwner { + abstract val firScope: FirScope private val allNamesCached by cached { getCallableNames() + getClassLikeSymbolNames() } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirMemberScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirMemberScope.kt index 56f7746b82f..e497f328f8a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirMemberScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirMemberScope.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope import org.jetbrains.kotlin.fir.scopes.FirScope -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef @@ -18,9 +18,9 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtUnsubstitutedScope internal class KtFirMemberScope( override val owner: KtFirClassOrObjectSymbol, - override val token: ValidityOwner, + token: ValidityToken, builder: KtSymbolByFirBuilder -) : KtFirDelegatingScope(builder), KtMemberScope, KtUnsubstitutedScope, ValidityOwnerByValidityToken { +) : KtFirDelegatingScope(builder, token), KtMemberScope, KtUnsubstitutedScope, ValidityTokenOwner { override val firScope: FirScope by weakRef { owner.fir.buildUseSiteMemberScope(owner.fir.session, ScopeSession()) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt index 43d8e8be77a..0dccdb6538f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractSimpleImportingScope import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultSimpleImportingScope -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope @@ -19,8 +19,8 @@ import org.jetbrains.kotlin.name.Name internal class KtFirNonStarImportingScope( firScope: FirAbstractSimpleImportingScope, builder: KtSymbolByFirBuilder, - override val token: ValidityOwner -) : KtFirDelegatingScope(builder), KtNonStarImportingScope, ValidityOwnerByValidityToken { + override val token: ValidityToken +) : KtFirDelegatingScope(builder, token), KtNonStarImportingScope, ValidityTokenOwner { override val firScope: FirAbstractSimpleImportingScope = firScope @OptIn(ExperimentalStdlibApi::class) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt index 915e84afe41..9ec7962c68d 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt @@ -8,20 +8,19 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol internal class KtFirPackageScope( override val owner: KtFirPackageSymbol, - override val token: ValidityOwner, + token: ValidityToken, builder: KtSymbolByFirBuilder, session: FirSession, -) : KtPackageScope, KtFirDelegatingScope(builder), ValidityOwnerByValidityToken { +) : KtPackageScope, KtFirDelegatingScope(builder, token), ValidityTokenOwner { override val firScope: FirScope by weakRef { FirPackageMemberScope(owner.fqName, session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirScopeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirScopeProvider.kt index c50734bbf4b..d7ad391d44a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirScopeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirScopeProvider.kt @@ -16,8 +16,8 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.LowLevelFirApiFacade -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol @@ -36,12 +36,12 @@ import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import java.util.* internal class KtFirScopeProvider( - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder, private val project: Project, session: FirSession, val firResolveState: FirModuleResolveState -) : KtScopeProvider(), ValidityOwnerByValidityToken { +) : KtScopeProvider(), ValidityTokenOwner { private val session by weakRef(session) private val memberScopeCache = IdentityHashMap() @@ -120,7 +120,7 @@ internal class KtFirScopeProvider( } } -private class KtFirDelegatingScopeImpl(firScope: FirScope, builder: KtSymbolByFirBuilder, override val token: ValidityOwner) : - KtFirDelegatingScope(builder), ValidityOwnerByValidityToken { +private class KtFirDelegatingScopeImpl(firScope: FirScope, builder: KtSymbolByFirBuilder, token: ValidityToken) : + KtFirDelegatingScope(builder, token), ValidityTokenOwner { override val firScope: FirScope = firScope } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt index 425692d283c..aa24a7ed028 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt @@ -9,8 +9,8 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.scopes.Import @@ -29,8 +29,8 @@ internal class KtFirStarImportingScope( firScope: FirAbstractStarImportingScope, builder: KtSymbolByFirBuilder, project: Project, - override val token: ValidityOwner, -) : KtFirDelegatingScope(builder), KtStarImportingScope, ValidityOwnerByValidityToken { + token: ValidityToken, +) : KtFirDelegatingScope(builder, token), KtStarImportingScope, ValidityTokenOwner { override val firScope: FirAbstractStarImportingScope = firScope override val isDefaultImportingScope: Boolean = withValidityAssertion { firScope is FirDefaultStarImportingScope } private val packageHelper = PackageIndexHelper(project) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt index a10bd13df32..f536b24bcc1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt @@ -9,7 +9,8 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -18,7 +19,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.* internal class KtFirAnonymousFunctionSymbol( fir: FirAnonymousFunction, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtAnonymousFunctionSymbol(), KtFirSymbol { override val fir: FirAnonymousFunction by weakRef(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt index 1495ff68f02..fd5eac4a545 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt @@ -7,14 +7,14 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.ReadOnlyWeakRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached +import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.ClassId @@ -22,10 +22,10 @@ import org.jetbrains.kotlin.name.Name internal class KtFirClassOrObjectSymbol( fir: FirRegularClass, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtClassOrObjectSymbol(), KtFirSymbol { - override val fir: FirRegularClass by ReadOnlyWeakRef(fir, this) + override val fir: FirRegularClass by weakRef(fir) override val psi: PsiElement? by cached { fir.findPsi(fir.session) } override val name: Name get() = withValidityAssertion { fir.classId.shortClassName } override val classId: ClassId get() = withValidityAssertion { fir.classId } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt index 18a178f002e..2e26c435623 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt @@ -12,7 +12,8 @@ import org.jetbrains.kotlin.fir.declarations.getPrimaryConstructorIfAny import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -23,7 +24,7 @@ import org.jetbrains.kotlin.name.ClassId internal class KtFirConstructorSymbol( fir: FirConstructor, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtConstructorSymbol(), KtFirSymbol { override val fir: FirConstructor by weakRef(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt index 4d760d29e22..0c8e06d1895 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -19,7 +20,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirConstructorValueParameterSymbol( fir: FirValueParameterImpl, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtConstructorParameterSymbol(), KtFirSymbol { override val fir: FirValueParameterImpl by weakRef(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt index 683073b125a..ec9d73ab4e3 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirEnumEntry import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -19,7 +20,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirEnumEntrySymbol( fir: FirEnumEntry, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtEnumEntrySymbol(), KtFirSymbol { override val fir: FirEnumEntry by weakRef(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt index 38a84fb74de..e72c4ae3904 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt @@ -9,7 +9,8 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -24,7 +25,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirFunctionSymbol( fir: FirSimpleFunction, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder, private val forcedOrigin: FirDeclarationOrigin? = null ) : KtFunctionSymbol(), KtFirSymbol { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt index f3cee15b15f..280ccee63da 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -20,7 +21,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirFunctionValueParameterSymbol( fir: FirValueParameterImpl, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtFunctionParameterSymbol(), KtFirSymbol { override val fir: FirValueParameterImpl by weakRef(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt index 3249f4ab2f6..8f5fd059121 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt @@ -9,8 +9,9 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirField import org.jetbrains.kotlin.fir.declarations.modality import org.jetbrains.kotlin.idea.fir.findPsi +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.types.KtType -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef @@ -21,7 +22,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirJavaFieldSymbol( fir: FirField, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtJavaFieldSymbol(), KtFirSymbol { override val fir: FirField by weakRef(fir) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt index 36595ffd91b..32037b099cf 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -20,7 +21,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirLocalVariableSymbol( fir: FirProperty, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder ) : KtLocalVariableSymbol(), KtFirSymbol { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt index b076582cfbf..d48145d5ab5 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt @@ -9,21 +9,18 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiManager import com.intellij.psi.impl.file.PsiPackageImpl -import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession -import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached -import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.name.FqName class KtFirPackageSymbol( override val fqName: FqName, private val project: Project, - override val token: ValidityOwner -) : KtPackageSymbol(), ValidityOwnerByValidityToken { + override val token: ValidityToken +) : KtPackageSymbol(), ValidityTokenOwner { override val psi: PsiElement? by cached { PsiPackageImpl(PsiManager.getInstance(project), fqName.asString().replace('/', '.')) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt index 9610055efbb..01fcda00646 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySymbol.kt @@ -10,7 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.modality import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached @@ -25,7 +26,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirPropertySymbol( fir: FirProperty, - override val token: ValidityOwner, + override val token: ValidityToken, private val builder: KtSymbolByFirBuilder, private val forcedOrigin: FirDeclarationOrigin? ) : KtPropertySymbol(), KtFirSymbol { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt index fa100005291..07dc8f194d1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt @@ -7,12 +7,12 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion -internal interface KtFirSymbol : KtSymbol, ValidityOwnerByValidityToken { +internal interface KtFirSymbol : KtSymbol, ValidityTokenOwner { val fir: F override val origin: KtSymbolOrigin get() = withValidityAssertion { fir.origin.asKtSymbolOrigin() } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt index 4ba20ba10ef..bf71fd45ceb 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt @@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveState -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.* @@ -21,11 +21,11 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* internal class KtFirSymbolProvider( - override val token: ValidityOwner, + override val token: ValidityToken, firSymbolProvider: FirSymbolProvider, private val resolveState: FirModuleResolveState, private val firSymbolBuilder: KtSymbolByFirBuilder -) : KtSymbolProvider(), ValidityOwnerByValidityToken { +) : KtSymbolProvider(), ValidityTokenOwner { private val firSymbolProvider by weakRef(firSymbolProvider) override fun getParameterSymbol(psi: KtParameter): KtParameterSymbol = withValidityAssertion { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAliasSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAliasSymbol.kt index 191e1cedbdd..0f40de18a0e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAliasSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAliasSymbol.kt @@ -8,9 +8,11 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.utils.ReadOnlyWeakRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached +import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeAliasSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.ClassId @@ -18,9 +20,9 @@ import org.jetbrains.kotlin.name.Name internal class KtFirTypeAliasSymbol( fir: FirTypeAlias, - override val token: ValidityOwner + override val token: ValidityToken ) : KtTypeAliasSymbol(), KtFirSymbol { - override val fir: FirTypeAlias by ReadOnlyWeakRef(fir, this) + override val fir: FirTypeAlias by weakRef(fir) override val psi: PsiElement? by cached { fir.findPsi(fir.session) } override val name: Name get() = withValidityAssertion { fir.name } override val classId: ClassId get() = withValidityAssertion { fir.symbol.classId } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt index ee17228f610..cdf1df7bf15 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.idea.fir.findPsi -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol @@ -17,7 +18,7 @@ import org.jetbrains.kotlin.name.Name internal class KtFirTypeParameterSymbol( fir: FirTypeParameter, - override val token: ValidityOwner + override val token: ValidityToken ) : KtTypeParameterSymbol(), KtFirSymbol { override val fir: FirTypeParameter by weakRef(fir) override val psi: PsiElement? by cached { fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt index a0fa6c0e924..0fe8cb193ba 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/types/FirKtType.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeCheckerContext -internal interface KtFirType : KtType, ValidityOwnerByValidityToken { +internal interface KtFirType : KtType, ValidityTokenOwner { val coneType: ConeKotlinType val typeCheckerContext: ConeTypeCheckerContext @@ -50,7 +50,7 @@ internal interface KtFirType : KtType, ValidityOwnerByValidityToken { internal class KtFirClassType( coneType: ConeClassLikeTypeImpl, typeCheckerContext: ConeTypeCheckerContext, - override val token: ValidityOwner, + override val token: ValidityToken, private val firBuilder: KtSymbolByFirBuilder, ) : KtClassType(), KtFirType { override val coneType by weakRef(coneType) @@ -74,7 +74,7 @@ internal class KtFirClassType( internal class KtFirErrorType( coneType: ConeClassErrorType, typeCheckerContext: ConeTypeCheckerContext, - override val token: ValidityOwner, + override val token: ValidityToken, ) : KtErrorType(), KtFirType { override val coneType by weakRef(coneType) override val typeCheckerContext by weakRef(typeCheckerContext) @@ -85,7 +85,7 @@ internal class KtFirErrorType( internal class KtFirTypeParameterType( coneType: ConeTypeParameterType, typeCheckerContext: ConeTypeCheckerContext, - override val token: ValidityOwner, + override val token: ValidityToken, private val firBuilder: KtSymbolByFirBuilder, ) : KtTypeParameterType(), KtFirType { override val coneType by weakRef(coneType) @@ -105,7 +105,7 @@ internal class KtFirTypeParameterType( internal class KtFirFlexibleType( coneType: ConeFlexibleType, typeCheckerContext: ConeTypeCheckerContext, - override val token: ValidityOwner, + override val token: ValidityToken, private val firBuilder: KtSymbolByFirBuilder, ) : KtFlexibleType(), KtFirType { override val coneType by weakRef(coneType) @@ -118,7 +118,7 @@ internal class KtFirFlexibleType( internal class KtFirIntersectionType( coneType: ConeIntersectionType, typeCheckerContext: ConeTypeCheckerContext, - override val token: ValidityOwner, + override val token: ValidityToken, private val firBuilder: KtSymbolByFirBuilder, ) : KtIntersectionType(), KtFirType { override val coneType by weakRef(coneType) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ReadOnlyWeakRef.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ReadOnlyWeakRef.kt index 0abc403ea94..1b82d60cf34 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ReadOnlyWeakRef.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ReadOnlyWeakRef.kt @@ -5,16 +5,19 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.utils -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import java.lang.ref.WeakReference import kotlin.reflect.KProperty -class ReadOnlyWeakRef(value: V, val validityOwner: ValidityOwner) { +class ReadOnlyWeakRef +@Deprecated("Consider suing ValidityTokenOwner.weakRef instead") +constructor(value: V, val token: ValidityToken) { val weakRef = WeakReference(value) @Suppress("NOTHING_TO_INLINE") inline operator fun getValue(thisRef: Any, property: KProperty<*>): V = - weakRef.get() ?: if (validityOwner.isValid()) { + weakRef.get() ?: if (token.isValid()) { error("Value of $property was garbage collected while analysis session is still valid") } else { error("Accessing the invalid value of $property") @@ -22,6 +25,6 @@ class ReadOnlyWeakRef(value: V, val validityOwner: ValidityOwner) { } @Suppress("NOTHING_TO_INLINE") -internal inline fun ValidityOwner.weakRef(value: V) = ReadOnlyWeakRef(value, this) +internal inline fun ValidityTokenOwner.weakRef(value: V) = ReadOnlyWeakRef(value, token) -internal inline fun ValidityOwner.weakRef(value: () -> V) = ReadOnlyWeakRef(value(), this) \ No newline at end of file +internal inline fun ValidityTokenOwner.weakRef(value: () -> V) = ReadOnlyWeakRef(value(), token) \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ValidityAwareCachedValue.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ValidityAwareCachedValue.kt index e05a5c48d96..e7ef4b87f6b 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ValidityAwareCachedValue.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/ValidityAwareCachedValue.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.utils -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner -import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityToken +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.assertIsValid import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty @@ -15,16 +15,16 @@ import kotlin.reflect.KProperty * Lazy value that guaranties safe publication and checks validity on every access */ class ValidityAwareCachedValue( - private val validityOwner: ValidityOwner, + private val token: ValidityToken, init: () -> T ) : ReadOnlyProperty { private val lazyValue = lazy(LazyThreadSafetyMode.PUBLICATION, init) @Suppress("UNCHECKED_CAST") override fun getValue(thisRef: Any, property: KProperty<*>): T { - validityOwner.assertIsValid() + token.assertIsValid() return lazyValue.value } } -internal fun ValidityOwnerByValidityToken.cached(init: () -> T) = ValidityAwareCachedValue(token, init) +internal fun ValidityTokenOwner.cached(init: () -> T) = ValidityAwareCachedValue(token, init)