FIR IDE: separate ValidityOwner to ValidityTokenOwner & ValidityToken
This commit is contained in:
+1
-6
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api
|
package org.jetbrains.kotlin.idea.frontend.api
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeProvider
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeProvider
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
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.name.ClassId
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
abstract class KtAnalysisSession(project: Project) : ValidityOwner {
|
abstract class KtAnalysisSession(override val token: ValidityToken) : ValidityTokenOwner {
|
||||||
protected open val validityToken = ReadActionConfinementValidityToken(project)
|
|
||||||
override fun isValid(): Boolean = validityToken.isValid()
|
|
||||||
override fun invalidationReason(): String = validityToken.invalidationReason()
|
|
||||||
|
|
||||||
abstract val symbolProvider: KtSymbolProvider
|
abstract val symbolProvider: KtSymbolProvider
|
||||||
abstract val scopeProvider: KtScopeProvider
|
abstract val scopeProvider: KtScopeProvider
|
||||||
|
|
||||||
|
|||||||
+3
-26
@@ -9,33 +9,10 @@ import com.intellij.openapi.application.ApplicationManager
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService
|
||||||
|
|
||||||
interface ValidityOwner {
|
class ReadActionConfinementValidityToken(project: Project) : ValidityToken() {
|
||||||
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 <R> 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 {
|
|
||||||
private val modificationTracker = KotlinModificationTrackerService.getInstance(project).modificationTracker
|
private val modificationTracker = KotlinModificationTrackerService.getInstance(project).modificationTracker
|
||||||
private val onCreatedTimeStamp = modificationTracker.modificationCount
|
private val onCreatedTimeStamp = modificationTracker.modificationCount
|
||||||
|
|
||||||
|
|
||||||
override fun isValid(): Boolean {
|
override fun isValid(): Boolean {
|
||||||
val application = ApplicationManager.getApplication()
|
val application = ApplicationManager.getApplication()
|
||||||
if (application.isDispatchThread) return false
|
if (application.isDispatchThread) return false
|
||||||
@@ -43,11 +20,11 @@ class ReadActionConfinementValidityToken(project: Project) : ValidityOwner {
|
|||||||
return onCreatedTimeStamp == modificationTracker.modificationCount
|
return onCreatedTimeStamp == modificationTracker.modificationCount
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun invalidationReason(): String {
|
override fun getInvalidationReason(): String {
|
||||||
val application = ApplicationManager.getApplication()
|
val application = ApplicationManager.getApplication()
|
||||||
if (application.isDispatchThread) return "Called in EDT thread"
|
if (application.isDispatchThread) return "Called in EDT thread"
|
||||||
if (!application.isReadAccessAllowed) return "Called outside read action"
|
if (!application.isReadAccessAllowed) return "Called outside read action"
|
||||||
if (onCreatedTimeStamp != modificationTracker.modificationCount) return "PSI has changed since creation"
|
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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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()
|
||||||
|
|
||||||
+20
@@ -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 <R> ValidityTokenOwner.withValidityAssertion(action: () -> R): R {
|
||||||
|
assertIsValid()
|
||||||
|
return action()
|
||||||
|
}
|
||||||
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.scopes
|
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.idea.frontend.api.symbols.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface KtScope : ValidityOwner {
|
interface KtScope : ValidityTokenOwner {
|
||||||
// TODO check that names are accessible
|
// TODO check that names are accessible
|
||||||
// maybe return some kind of lazy set
|
// maybe return some kind of lazy set
|
||||||
fun getAllNames(): Set<Name>
|
fun getAllNames(): Set<Name>
|
||||||
|
|||||||
+2
-2
@@ -5,14 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.scopes
|
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.KtClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||||
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 KtScopeProvider : ValidityOwner {
|
abstract class KtScopeProvider : ValidityTokenOwner {
|
||||||
abstract fun getMemberScope(classSymbol: KtClassOrObjectSymbol): KtMemberScope
|
abstract fun getMemberScope(classSymbol: KtClassOrObjectSymbol): KtMemberScope
|
||||||
abstract fun getDeclaredMemberScope(classSymbol: KtClassOrObjectSymbol): KtDeclaredMemberScope
|
abstract fun getDeclaredMemberScope(classSymbol: KtClassOrObjectSymbol): KtDeclaredMemberScope
|
||||||
abstract fun getPackageScope(packageSymbol: KtPackageSymbol): KtPackageScope
|
abstract fun getPackageScope(packageSymbol: KtPackageSymbol): KtPackageScope
|
||||||
|
|||||||
+2
-2
@@ -6,9 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.idea.frontend.api.symbols
|
package org.jetbrains.kotlin.idea.frontend.api.symbols
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
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 origin: KtSymbolOrigin
|
||||||
val psi: PsiElement?
|
val psi: PsiElement?
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -5,13 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.symbols
|
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.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
abstract class KtSymbolProvider : ValidityOwner {
|
abstract class KtSymbolProvider : ValidityTokenOwner {
|
||||||
open fun getSymbol(psi: KtDeclaration): KtSymbol = when (psi) {
|
open fun getSymbol(psi: KtDeclaration): KtSymbol = when (psi) {
|
||||||
is KtParameter -> getParameterSymbol(psi)
|
is KtParameter -> getParameterSymbol(psi)
|
||||||
is KtNamedFunction -> getFunctionSymbol(psi)
|
is KtNamedFunction -> getFunctionSymbol(psi)
|
||||||
|
|||||||
@@ -6,13 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.idea.frontend.api.types
|
package org.jetbrains.kotlin.idea.frontend.api.types
|
||||||
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgument
|
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.KtClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface KtType : ValidityOwner {
|
interface KtType : ValidityTokenOwner {
|
||||||
fun isEqualTo(other: KtType): Boolean
|
fun isEqualTo(other: KtType): Boolean
|
||||||
fun isSubTypeOf(superType: KtType): Boolean
|
fun isSubTypeOf(superType: KtType): Boolean
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
|
package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
|
||||||
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||||
@@ -20,8 +20,8 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
class KtFirCompositeScope(
|
class KtFirCompositeScope(
|
||||||
override val subScopes: List<KtScope>,
|
override val subScopes: List<KtScope>,
|
||||||
override val token: ValidityOwner
|
override val token: ValidityToken
|
||||||
) : KtCompositeScope, ValidityOwnerByValidityToken {
|
) : KtCompositeScope, ValidityTokenOwner {
|
||||||
override fun getAllNames(): Set<Name> = withValidityAssertion {
|
override fun getAllNames(): Set<Name> = withValidityAssertion {
|
||||||
buildSet {
|
buildSet {
|
||||||
subScopes.flatMapTo(this) { it.getAllNames() }
|
subScopes.flatMapTo(this) { it.getAllNames() }
|
||||||
|
|||||||
+5
-5
@@ -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.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
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(
|
internal class KtFirDeclaredMemberScope(
|
||||||
override val owner: KtFirClassOrObjectSymbol,
|
override val owner: KtFirClassOrObjectSymbol,
|
||||||
override val token: ValidityOwner,
|
token: ValidityToken,
|
||||||
builder: KtSymbolByFirBuilder
|
builder: KtSymbolByFirBuilder
|
||||||
) : KtFirDelegatingScope(builder),
|
) : KtFirDelegatingScope(builder, token),
|
||||||
KtDeclaredMemberScope,
|
KtDeclaredMemberScope,
|
||||||
KtUnsubstitutedScope<KtFirDelegatingScope>,
|
KtUnsubstitutedScope<KtFirDelegatingScope>,
|
||||||
ValidityOwnerByValidityToken {
|
ValidityTokenOwner {
|
||||||
override val firScope: FirScope by weakRef(declaredMemberScope(owner.fir))
|
override val firScope: FirScope by weakRef(declaredMemberScope(owner.fir))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-1
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
|
|||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
|
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
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.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope
|
||||||
@@ -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.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.Name
|
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
|
abstract val firScope: FirScope
|
||||||
|
|
||||||
private val allNamesCached by cached { getCallableNames() + getClassLikeSymbolNames() }
|
private val allNamesCached by cached { getCallableNames() + getClassLikeSymbolNames() }
|
||||||
|
|||||||
+4
-4
@@ -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.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
|
import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
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.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
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(
|
internal class KtFirMemberScope(
|
||||||
override val owner: KtFirClassOrObjectSymbol,
|
override val owner: KtFirClassOrObjectSymbol,
|
||||||
override val token: ValidityOwner,
|
token: ValidityToken,
|
||||||
builder: KtSymbolByFirBuilder
|
builder: KtSymbolByFirBuilder
|
||||||
) : KtFirDelegatingScope(builder), KtMemberScope, KtUnsubstitutedScope<KtMemberScope>, ValidityOwnerByValidityToken {
|
) : KtFirDelegatingScope(builder, token), KtMemberScope, KtUnsubstitutedScope<KtMemberScope>, ValidityTokenOwner {
|
||||||
override val firScope: FirScope by weakRef {
|
override val firScope: FirScope by weakRef {
|
||||||
owner.fir.buildUseSiteMemberScope(owner.fir.session, ScopeSession())
|
owner.fir.buildUseSiteMemberScope(owner.fir.session, ScopeSession())
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -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.FirAbstractSimpleImportingScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultSimpleImportingScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultSimpleImportingScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope
|
||||||
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
internal class KtFirNonStarImportingScope(
|
internal class KtFirNonStarImportingScope(
|
||||||
firScope: FirAbstractSimpleImportingScope,
|
firScope: FirAbstractSimpleImportingScope,
|
||||||
builder: KtSymbolByFirBuilder,
|
builder: KtSymbolByFirBuilder,
|
||||||
override val token: ValidityOwner
|
override val token: ValidityToken
|
||||||
) : KtFirDelegatingScope(builder), KtNonStarImportingScope, ValidityOwnerByValidityToken {
|
) : KtFirDelegatingScope(builder, token), KtNonStarImportingScope, ValidityTokenOwner {
|
||||||
override val firScope: FirAbstractSimpleImportingScope = firScope
|
override val firScope: FirAbstractSimpleImportingScope = firScope
|
||||||
|
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
|
|||||||
+4
-5
@@ -8,20 +8,19 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol
|
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.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol
|
|
||||||
|
|
||||||
internal class KtFirPackageScope(
|
internal class KtFirPackageScope(
|
||||||
override val owner: KtFirPackageSymbol,
|
override val owner: KtFirPackageSymbol,
|
||||||
override val token: ValidityOwner,
|
token: ValidityToken,
|
||||||
builder: KtSymbolByFirBuilder,
|
builder: KtSymbolByFirBuilder,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
) : KtPackageScope, KtFirDelegatingScope(builder), ValidityOwnerByValidityToken {
|
) : KtPackageScope, KtFirDelegatingScope(builder, token), ValidityTokenOwner {
|
||||||
override val firScope: FirScope by weakRef {
|
override val firScope: FirScope by weakRef {
|
||||||
FirPackageMemberScope(owner.fqName, session)
|
FirPackageMemberScope(owner.fqName, session)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -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.getOrBuildFirOfType
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirModuleResolveState
|
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.fir.low.level.api.LowLevelFirApiFacade
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
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.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirPackageSymbol
|
||||||
@@ -36,12 +36,12 @@ import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
internal class KtFirScopeProvider(
|
internal class KtFirScopeProvider(
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
val firResolveState: FirModuleResolveState
|
val firResolveState: FirModuleResolveState
|
||||||
) : KtScopeProvider(), ValidityOwnerByValidityToken {
|
) : KtScopeProvider(), ValidityTokenOwner {
|
||||||
private val session by weakRef(session)
|
private val session by weakRef(session)
|
||||||
|
|
||||||
private val memberScopeCache = IdentityHashMap<KtClassOrObjectSymbol, KtMemberScope>()
|
private val memberScopeCache = IdentityHashMap<KtClassOrObjectSymbol, KtMemberScope>()
|
||||||
@@ -120,7 +120,7 @@ internal class KtFirScopeProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class KtFirDelegatingScopeImpl(firScope: FirScope, builder: KtSymbolByFirBuilder, override val token: ValidityOwner) :
|
private class KtFirDelegatingScopeImpl(firScope: FirScope, builder: KtSymbolByFirBuilder, token: ValidityToken) :
|
||||||
KtFirDelegatingScope(builder), ValidityOwnerByValidityToken {
|
KtFirDelegatingScope(builder, token), ValidityTokenOwner {
|
||||||
override val firScope: FirScope = firScope
|
override val firScope: FirScope = firScope
|
||||||
}
|
}
|
||||||
+4
-4
@@ -9,8 +9,8 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.scopes.Import
|
import org.jetbrains.kotlin.idea.frontend.api.scopes.Import
|
||||||
@@ -29,8 +29,8 @@ internal class KtFirStarImportingScope(
|
|||||||
firScope: FirAbstractStarImportingScope,
|
firScope: FirAbstractStarImportingScope,
|
||||||
builder: KtSymbolByFirBuilder,
|
builder: KtSymbolByFirBuilder,
|
||||||
project: Project,
|
project: Project,
|
||||||
override val token: ValidityOwner,
|
token: ValidityToken,
|
||||||
) : KtFirDelegatingScope(builder), KtStarImportingScope, ValidityOwnerByValidityToken {
|
) : KtFirDelegatingScope(builder, token), KtStarImportingScope, ValidityTokenOwner {
|
||||||
override val firScope: FirAbstractStarImportingScope = firScope
|
override val firScope: FirAbstractStarImportingScope = firScope
|
||||||
override val isDefaultImportingScope: Boolean = withValidityAssertion { firScope is FirDefaultStarImportingScope }
|
override val isDefaultImportingScope: Boolean = withValidityAssertion { firScope is FirDefaultStarImportingScope }
|
||||||
private val packageHelper = PackageIndexHelper(project)
|
private val packageHelper = PackageIndexHelper(project)
|
||||||
|
|||||||
+3
-2
@@ -9,7 +9,8 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -18,7 +19,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
|||||||
|
|
||||||
internal class KtFirAnonymousFunctionSymbol(
|
internal class KtFirAnonymousFunctionSymbol(
|
||||||
fir: FirAnonymousFunction,
|
fir: FirAnonymousFunction,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtAnonymousFunctionSymbol(), KtFirSymbol<FirAnonymousFunction> {
|
) : KtAnonymousFunctionSymbol(), KtFirSymbol<FirAnonymousFunction> {
|
||||||
override val fir: FirAnonymousFunction by weakRef(fir)
|
override val fir: FirAnonymousFunction by weakRef(fir)
|
||||||
|
|||||||
+5
-5
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
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.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.ReadOnlyWeakRef
|
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.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.symbols.*
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -22,10 +22,10 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirClassOrObjectSymbol(
|
internal class KtFirClassOrObjectSymbol(
|
||||||
fir: FirRegularClass,
|
fir: FirRegularClass,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtClassOrObjectSymbol(), KtFirSymbol<FirRegularClass> {
|
) : KtClassOrObjectSymbol(), KtFirSymbol<FirRegularClass> {
|
||||||
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 psi: PsiElement? by cached { fir.findPsi(fir.session) }
|
||||||
override val name: Name get() = withValidityAssertion { fir.classId.shortClassName }
|
override val name: Name get() = withValidityAssertion { fir.classId.shortClassName }
|
||||||
override val classId: ClassId get() = withValidityAssertion { fir.classId }
|
override val classId: ClassId get() = withValidityAssertion { fir.classId }
|
||||||
|
|||||||
+3
-2
@@ -12,7 +12,8 @@ import org.jetbrains.kotlin.fir.declarations.getPrimaryConstructorIfAny
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -23,7 +24,7 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
|
|
||||||
internal class KtFirConstructorSymbol(
|
internal class KtFirConstructorSymbol(
|
||||||
fir: FirConstructor,
|
fir: FirConstructor,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtConstructorSymbol(), KtFirSymbol<FirConstructor> {
|
) : KtConstructorSymbol(), KtFirSymbol<FirConstructor> {
|
||||||
override val fir: FirConstructor by weakRef(fir)
|
override val fir: FirConstructor by weakRef(fir)
|
||||||
|
|||||||
+3
-2
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -19,7 +20,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirConstructorValueParameterSymbol(
|
internal class KtFirConstructorValueParameterSymbol(
|
||||||
fir: FirValueParameterImpl,
|
fir: FirValueParameterImpl,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtConstructorParameterSymbol(), KtFirSymbol<FirValueParameterImpl> {
|
) : KtConstructorParameterSymbol(), KtFirSymbol<FirValueParameterImpl> {
|
||||||
override val fir: FirValueParameterImpl by weakRef(fir)
|
override val fir: FirValueParameterImpl by weakRef(fir)
|
||||||
|
|||||||
+3
-2
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -19,7 +20,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirEnumEntrySymbol(
|
internal class KtFirEnumEntrySymbol(
|
||||||
fir: FirEnumEntry,
|
fir: FirEnumEntry,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtEnumEntrySymbol(), KtFirSymbol<FirEnumEntry> {
|
) : KtEnumEntrySymbol(), KtFirSymbol<FirEnumEntry> {
|
||||||
override val fir: FirEnumEntry by weakRef(fir)
|
override val fir: FirEnumEntry by weakRef(fir)
|
||||||
|
|||||||
+3
-2
@@ -9,7 +9,8 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -24,7 +25,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirFunctionSymbol(
|
internal class KtFirFunctionSymbol(
|
||||||
fir: FirSimpleFunction,
|
fir: FirSimpleFunction,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
private val forcedOrigin: FirDeclarationOrigin? = null
|
private val forcedOrigin: FirDeclarationOrigin? = null
|
||||||
) : KtFunctionSymbol(), KtFirSymbol<FirSimpleFunction> {
|
) : KtFunctionSymbol(), KtFirSymbol<FirSimpleFunction> {
|
||||||
|
|||||||
+3
-2
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -20,7 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirFunctionValueParameterSymbol(
|
internal class KtFirFunctionValueParameterSymbol(
|
||||||
fir: FirValueParameterImpl,
|
fir: FirValueParameterImpl,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtFunctionParameterSymbol(), KtFirSymbol<FirValueParameterImpl> {
|
) : KtFunctionParameterSymbol(), KtFirSymbol<FirValueParameterImpl> {
|
||||||
override val fir: FirValueParameterImpl by weakRef(fir)
|
override val fir: FirValueParameterImpl by weakRef(fir)
|
||||||
|
|||||||
+3
-2
@@ -9,8 +9,9 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||||
import org.jetbrains.kotlin.fir.declarations.modality
|
import org.jetbrains.kotlin.fir.declarations.modality
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.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.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
@@ -21,7 +22,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirJavaFieldSymbol(
|
internal class KtFirJavaFieldSymbol(
|
||||||
fir: FirField,
|
fir: FirField,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtJavaFieldSymbol(), KtFirSymbol<FirField> {
|
) : KtJavaFieldSymbol(), KtFirSymbol<FirField> {
|
||||||
override val fir: FirField by weakRef(fir)
|
override val fir: FirField by weakRef(fir)
|
||||||
|
|||||||
+3
-2
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -20,7 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirLocalVariableSymbol(
|
internal class KtFirLocalVariableSymbol(
|
||||||
fir: FirProperty,
|
fir: FirProperty,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder
|
private val builder: KtSymbolByFirBuilder
|
||||||
) : KtLocalVariableSymbol(),
|
) : KtLocalVariableSymbol(),
|
||||||
KtFirSymbol<FirProperty> {
|
KtFirSymbol<FirProperty> {
|
||||||
|
|||||||
+4
-7
@@ -9,21 +9,18 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import com.intellij.psi.impl.file.PsiPackageImpl
|
import com.intellij.psi.impl.file.PsiPackageImpl
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
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.frontend.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
class KtFirPackageSymbol(
|
class KtFirPackageSymbol(
|
||||||
override val fqName: FqName,
|
override val fqName: FqName,
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
override val token: ValidityOwner
|
override val token: ValidityToken
|
||||||
) : KtPackageSymbol(), ValidityOwnerByValidityToken {
|
) : KtPackageSymbol(), ValidityTokenOwner {
|
||||||
override val psi: PsiElement? by cached {
|
override val psi: PsiElement? by cached {
|
||||||
PsiPackageImpl(PsiManager.getInstance(project), fqName.asString().replace('/', '.'))
|
PsiPackageImpl(PsiManager.getInstance(project), fqName.asString().replace('/', '.'))
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -10,7 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.modality
|
import org.jetbrains.kotlin.fir.declarations.modality
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.types.KtType
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
@@ -25,7 +26,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirPropertySymbol(
|
internal class KtFirPropertySymbol(
|
||||||
fir: FirProperty,
|
fir: FirProperty,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
private val forcedOrigin: FirDeclarationOrigin?
|
private val forcedOrigin: FirDeclarationOrigin?
|
||||||
) : KtPropertySymbol(), KtFirSymbol<FirProperty> {
|
) : KtPropertySymbol(), KtFirSymbol<FirProperty> {
|
||||||
|
|||||||
+2
-2
@@ -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.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
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.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
|
|
||||||
internal interface KtFirSymbol<F : FirDeclaration> : KtSymbol, ValidityOwnerByValidityToken {
|
internal interface KtFirSymbol<F : FirDeclaration> : KtSymbol, ValidityTokenOwner {
|
||||||
val fir: F
|
val fir: F
|
||||||
override val origin: KtSymbolOrigin get() = withValidityAssertion { fir.origin.asKtSymbolOrigin() }
|
override val origin: KtSymbolOrigin get() = withValidityAssertion { fir.origin.asKtSymbolOrigin() }
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType
|
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.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||||
@@ -21,11 +21,11 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
internal class KtFirSymbolProvider(
|
internal class KtFirSymbolProvider(
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
firSymbolProvider: FirSymbolProvider,
|
firSymbolProvider: FirSymbolProvider,
|
||||||
private val resolveState: FirModuleResolveState,
|
private val resolveState: FirModuleResolveState,
|
||||||
private val firSymbolBuilder: KtSymbolByFirBuilder
|
private val firSymbolBuilder: KtSymbolByFirBuilder
|
||||||
) : KtSymbolProvider(), ValidityOwnerByValidityToken {
|
) : KtSymbolProvider(), ValidityTokenOwner {
|
||||||
private val firSymbolProvider by weakRef(firSymbolProvider)
|
private val firSymbolProvider by weakRef(firSymbolProvider)
|
||||||
|
|
||||||
override fun getParameterSymbol(psi: KtParameter): KtParameterSymbol = withValidityAssertion {
|
override fun getParameterSymbol(psi: KtParameter): KtParameterSymbol = withValidityAssertion {
|
||||||
|
|||||||
+5
-3
@@ -8,9 +8,11 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.ReadOnlyWeakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeAliasSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -18,9 +20,9 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirTypeAliasSymbol(
|
internal class KtFirTypeAliasSymbol(
|
||||||
fir: FirTypeAlias,
|
fir: FirTypeAlias,
|
||||||
override val token: ValidityOwner
|
override val token: ValidityToken
|
||||||
) : KtTypeAliasSymbol(), KtFirSymbol<FirTypeAlias> {
|
) : KtTypeAliasSymbol(), KtFirSymbol<FirTypeAlias> {
|
||||||
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 psi: PsiElement? by cached { fir.findPsi(fir.session) }
|
||||||
override val name: Name get() = withValidityAssertion { fir.name }
|
override val name: Name get() = withValidityAssertion { fir.name }
|
||||||
override val classId: ClassId get() = withValidityAssertion { fir.symbol.classId }
|
override val classId: ClassId get() = withValidityAssertion { fir.symbol.classId }
|
||||||
|
|||||||
+3
-2
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
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.cached
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol
|
||||||
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirTypeParameterSymbol(
|
internal class KtFirTypeParameterSymbol(
|
||||||
fir: FirTypeParameter,
|
fir: FirTypeParameter,
|
||||||
override val token: ValidityOwner
|
override val token: ValidityToken
|
||||||
) : KtTypeParameterSymbol(), KtFirSymbol<FirTypeParameter> {
|
) : KtTypeParameterSymbol(), KtFirSymbol<FirTypeParameter> {
|
||||||
override val fir: FirTypeParameter by weakRef(fir)
|
override val fir: FirTypeParameter by weakRef(fir)
|
||||||
override val psi: PsiElement? by cached { fir.findPsi(fir.session) }
|
override val psi: PsiElement? by cached { fir.findPsi(fir.session) }
|
||||||
|
|||||||
+6
-6
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
|
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
|
||||||
|
|
||||||
internal interface KtFirType : KtType, ValidityOwnerByValidityToken {
|
internal interface KtFirType : KtType, ValidityTokenOwner {
|
||||||
val coneType: ConeKotlinType
|
val coneType: ConeKotlinType
|
||||||
val typeCheckerContext: ConeTypeCheckerContext
|
val typeCheckerContext: ConeTypeCheckerContext
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ internal interface KtFirType : KtType, ValidityOwnerByValidityToken {
|
|||||||
internal class KtFirClassType(
|
internal class KtFirClassType(
|
||||||
coneType: ConeClassLikeTypeImpl,
|
coneType: ConeClassLikeTypeImpl,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtClassType(), KtFirType {
|
) : KtClassType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
@@ -74,7 +74,7 @@ internal class KtFirClassType(
|
|||||||
internal class KtFirErrorType(
|
internal class KtFirErrorType(
|
||||||
coneType: ConeClassErrorType,
|
coneType: ConeClassErrorType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
) : KtErrorType(), KtFirType {
|
) : KtErrorType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
override val typeCheckerContext by weakRef(typeCheckerContext)
|
override val typeCheckerContext by weakRef(typeCheckerContext)
|
||||||
@@ -85,7 +85,7 @@ internal class KtFirErrorType(
|
|||||||
internal class KtFirTypeParameterType(
|
internal class KtFirTypeParameterType(
|
||||||
coneType: ConeTypeParameterType,
|
coneType: ConeTypeParameterType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtTypeParameterType(), KtFirType {
|
) : KtTypeParameterType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
@@ -105,7 +105,7 @@ internal class KtFirTypeParameterType(
|
|||||||
internal class KtFirFlexibleType(
|
internal class KtFirFlexibleType(
|
||||||
coneType: ConeFlexibleType,
|
coneType: ConeFlexibleType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtFlexibleType(), KtFirType {
|
) : KtFlexibleType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
@@ -118,7 +118,7 @@ internal class KtFirFlexibleType(
|
|||||||
internal class KtFirIntersectionType(
|
internal class KtFirIntersectionType(
|
||||||
coneType: ConeIntersectionType,
|
coneType: ConeIntersectionType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: ValidityOwner,
|
override val token: ValidityToken,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtIntersectionType(), KtFirType {
|
) : KtIntersectionType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
|
|||||||
+8
-5
@@ -5,16 +5,19 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.fir.utils
|
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 java.lang.ref.WeakReference
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class ReadOnlyWeakRef<V : Any>(value: V, val validityOwner: ValidityOwner) {
|
class ReadOnlyWeakRef<V : Any>
|
||||||
|
@Deprecated("Consider suing ValidityTokenOwner.weakRef instead")
|
||||||
|
constructor(value: V, val token: ValidityToken) {
|
||||||
val weakRef = WeakReference(value)
|
val weakRef = WeakReference(value)
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
inline operator fun getValue(thisRef: Any, property: KProperty<*>): V =
|
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")
|
error("Value of $property was garbage collected while analysis session is still valid")
|
||||||
} else {
|
} else {
|
||||||
error("Accessing the invalid value of $property")
|
error("Accessing the invalid value of $property")
|
||||||
@@ -22,6 +25,6 @@ class ReadOnlyWeakRef<V : Any>(value: V, val validityOwner: ValidityOwner) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
internal inline fun <V : Any> ValidityOwner.weakRef(value: V) = ReadOnlyWeakRef(value, this)
|
internal inline fun <V : Any> ValidityTokenOwner.weakRef(value: V) = ReadOnlyWeakRef(value, token)
|
||||||
|
|
||||||
internal inline fun <V : Any> ValidityOwner.weakRef(value: () -> V) = ReadOnlyWeakRef(value(), this)
|
internal inline fun <V : Any> ValidityTokenOwner.weakRef(value: () -> V) = ReadOnlyWeakRef(value(), token)
|
||||||
+5
-5
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.fir.utils
|
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.ValidityOwnerByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.assertIsValid
|
import org.jetbrains.kotlin.idea.frontend.api.assertIsValid
|
||||||
import kotlin.properties.ReadOnlyProperty
|
import kotlin.properties.ReadOnlyProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
@@ -15,16 +15,16 @@ import kotlin.reflect.KProperty
|
|||||||
* Lazy value that guaranties safe publication and checks validity on every access
|
* Lazy value that guaranties safe publication and checks validity on every access
|
||||||
*/
|
*/
|
||||||
class ValidityAwareCachedValue<T>(
|
class ValidityAwareCachedValue<T>(
|
||||||
private val validityOwner: ValidityOwner,
|
private val token: ValidityToken,
|
||||||
init: () -> T
|
init: () -> T
|
||||||
) : ReadOnlyProperty<Any, T> {
|
) : ReadOnlyProperty<Any, T> {
|
||||||
private val lazyValue = lazy(LazyThreadSafetyMode.PUBLICATION, init)
|
private val lazyValue = lazy(LazyThreadSafetyMode.PUBLICATION, init)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun getValue(thisRef: Any, property: KProperty<*>): T {
|
override fun getValue(thisRef: Any, property: KProperty<*>): T {
|
||||||
validityOwner.assertIsValid()
|
token.assertIsValid()
|
||||||
return lazyValue.value
|
return lazyValue.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun <T> ValidityOwnerByValidityToken.cached(init: () -> T) = ValidityAwareCachedValue(token, init)
|
internal fun <T> ValidityTokenOwner.cached(init: () -> T) = ValidityAwareCachedValue(token, init)
|
||||||
|
|||||||
Reference in New Issue
Block a user