FIR IDE: rename Invalidatable -> ValidityOwner
This commit is contained in:
+1
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
|||||||
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) : Invalidatable {
|
abstract class KtAnalysisSession(project: Project) : ValidityOwner {
|
||||||
protected open val validityToken = ReadActionConfinementValidityToken(project)
|
protected open val validityToken = ReadActionConfinementValidityToken(project)
|
||||||
override fun isValid(): Boolean = validityToken.isValid()
|
override fun isValid(): Boolean = validityToken.isValid()
|
||||||
override fun invalidationReason(): String = validityToken.invalidationReason()
|
override fun invalidationReason(): String = validityToken.invalidationReason()
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ 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 : Invalidatable {
|
interface KtType : ValidityOwner {
|
||||||
fun isEqualTo(other: KtType): Boolean
|
fun isEqualTo(other: KtType): Boolean
|
||||||
fun isSubTypeOf(superType: KtType): Boolean
|
fun isSubTypeOf(superType: KtType): Boolean
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -9,29 +9,29 @@ 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 Invalidatable {
|
interface ValidityOwner {
|
||||||
fun isValid(): Boolean
|
fun isValid(): Boolean
|
||||||
|
|
||||||
fun invalidationReason(): String
|
fun invalidationReason(): String
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
inline fun Invalidatable.assertIsValid() {
|
inline fun ValidityOwner.assertIsValid() {
|
||||||
assert(isValid()) { "Access to invalid $this, invalidation reason is ${invalidationReason()}" }
|
assert(isValid()) { "Access to invalid $this, invalidation reason is ${invalidationReason()}" }
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun <R> Invalidatable.withValidityAssertion(action: () -> R): R {
|
inline fun <R> ValidityOwner.withValidityAssertion(action: () -> R): R {
|
||||||
assertIsValid()
|
assertIsValid()
|
||||||
return action()
|
return action()
|
||||||
}
|
}
|
||||||
|
|
||||||
interface InvalidatableByValidityToken : Invalidatable {
|
interface ValidityOwnerByValidityToken : ValidityOwner {
|
||||||
val token: Invalidatable
|
val token: ValidityOwner
|
||||||
override fun isValid(): Boolean = token.isValid()
|
override fun isValid(): Boolean = token.isValid()
|
||||||
override fun invalidationReason(): String = token.invalidationReason()
|
override fun invalidationReason(): String = token.invalidationReason()
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReadActionConfinementValidityToken(project: Project) : Invalidatable {
|
class ReadActionConfinementValidityToken(project: Project) : ValidityOwner {
|
||||||
private val modificationTracker = KotlinModificationTrackerService.getInstance(project).modificationTracker
|
private val modificationTracker = KotlinModificationTrackerService.getInstance(project).modificationTracker
|
||||||
private val ownerThread = Thread.currentThread()
|
private val ownerThread = Thread.currentThread()
|
||||||
private val onCreatedTimeStamp = modificationTracker.modificationCount
|
private val onCreatedTimeStamp = modificationTracker.modificationCount
|
||||||
+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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
|
|
||||||
interface KtSymbol : Invalidatable {
|
interface KtSymbol : ValidityOwner {
|
||||||
val origin: KtSymbolOrigin
|
val origin: KtSymbolOrigin
|
||||||
val psi: PsiElement?
|
val psi: PsiElement?
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.frontend.api.symbols
|
package org.jetbrains.kotlin.idea.frontend.api.symbols
|
||||||
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
abstract class KtSymbolProvider : Invalidatable {
|
abstract class KtSymbolProvider : ValidityOwner {
|
||||||
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)
|
||||||
|
|||||||
@@ -18,7 +18,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, InvalidatableByValidityToken {
|
internal interface KtFirType : KtType, ValidityOwnerByValidityToken {
|
||||||
val coneType: ConeKotlinType
|
val coneType: ConeKotlinType
|
||||||
val typeCheckerContext: ConeTypeCheckerContext
|
val typeCheckerContext: ConeTypeCheckerContext
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ internal interface KtFirType : KtType, InvalidatableByValidityToken {
|
|||||||
internal class KtFirClassType(
|
internal class KtFirClassType(
|
||||||
coneType: ConeClassLikeTypeImpl,
|
coneType: ConeClassLikeTypeImpl,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtClassType(), KtFirType {
|
) : KtClassType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
@@ -73,7 +73,7 @@ internal class KtFirClassType(
|
|||||||
internal class KtFirErrorType(
|
internal class KtFirErrorType(
|
||||||
coneType: ConeClassErrorType,
|
coneType: ConeClassErrorType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
) : 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)
|
||||||
@@ -84,7 +84,7 @@ internal class KtFirErrorType(
|
|||||||
internal class KtFirTypeParameterType(
|
internal class KtFirTypeParameterType(
|
||||||
coneType: ConeTypeParameterType,
|
coneType: ConeTypeParameterType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtTypeParameterType(), KtFirType {
|
) : KtTypeParameterType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
@@ -104,7 +104,7 @@ internal class KtFirTypeParameterType(
|
|||||||
internal class KtFirFlexibleType(
|
internal class KtFirFlexibleType(
|
||||||
coneType: ConeFlexibleType,
|
coneType: ConeFlexibleType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtFlexibleType(), KtFirType {
|
) : KtFlexibleType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
@@ -117,7 +117,7 @@ internal class KtFirFlexibleType(
|
|||||||
internal class KtFirIntersectionType(
|
internal class KtFirIntersectionType(
|
||||||
coneType: ConeIntersectionType,
|
coneType: ConeIntersectionType,
|
||||||
typeCheckerContext: ConeTypeCheckerContext,
|
typeCheckerContext: ConeTypeCheckerContext,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
private val firBuilder: KtSymbolByFirBuilder,
|
private val firBuilder: KtSymbolByFirBuilder,
|
||||||
) : KtIntersectionType(), KtFirType {
|
) : KtIntersectionType(), KtFirType {
|
||||||
override val coneType by weakRef(coneType)
|
override val coneType by weakRef(coneType)
|
||||||
|
|||||||
+1
-8
@@ -16,14 +16,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
|||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.*
|
import org.jetbrains.kotlin.idea.frontend.api.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.*
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.Invalidatable
|
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.*
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.*
|
||||||
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.KtFirLocalVariableSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirLocalVariableSymbol
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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 +18,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
|||||||
|
|
||||||
internal class KtFirAnonymousFunctionSymbol(
|
internal class KtFirAnonymousFunctionSymbol(
|
||||||
fir: FirAnonymousFunction,
|
fir: FirAnonymousFunction,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
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)
|
||||||
|
|||||||
+2
-2
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
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
|
||||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirClassOrObjectSymbol(
|
internal class KtFirClassOrObjectSymbol(
|
||||||
fir: FirRegularClass,
|
fir: FirRegularClass,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
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 ReadOnlyWeakRef(fir, this)
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
|||||||
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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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 +24,7 @@ import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
|||||||
|
|
||||||
internal class KtFirConstructorSymbol(
|
internal class KtFirConstructorSymbol(
|
||||||
fir: FirConstructor,
|
fir: FirConstructor,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
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)
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ 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.FirField
|
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.isLocal
|
|||||||
import org.jetbrains.kotlin.fir.declarations.isOperator
|
import org.jetbrains.kotlin.fir.declarations.isOperator
|
||||||
import org.jetbrains.kotlin.fir.declarations.isSuspend
|
import org.jetbrains.kotlin.fir.declarations.isSuspend
|
||||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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 +25,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirFunctionSymbol(
|
internal class KtFirFunctionSymbol(
|
||||||
fir: FirSimpleFunction,
|
fir: FirSimpleFunction,
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
private val builder: KtSymbolByFirBuilder,
|
private val builder: KtSymbolByFirBuilder,
|
||||||
) : KtFunctionSymbol(), KtFirSymbol<FirSimpleFunction> {
|
) : KtFunctionSymbol(), KtFirSymbol<FirSimpleFunction> {
|
||||||
override val fir: FirSimpleFunction by weakRef(fir)
|
override val fir: FirSimpleFunction by weakRef(fir)
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.KtType
|
import org.jetbrains.kotlin.idea.frontend.api.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
|
||||||
|
|||||||
+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.InvalidatableByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
||||||
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, InvalidatableByValidityToken {
|
internal interface KtFirSymbol<F : FirDeclaration> : KtSymbol, ValidityOwnerByValidityToken {
|
||||||
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
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
|||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
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.frontend.api.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.InvalidatableByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
||||||
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.*
|
||||||
@@ -18,10 +18,10 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
internal class KtFirSymbolProvider(
|
internal class KtFirSymbolProvider(
|
||||||
override val token: Invalidatable,
|
override val token: ValidityOwner,
|
||||||
firSymbolProvider: FirSymbolProvider,
|
firSymbolProvider: FirSymbolProvider,
|
||||||
private val firSymbolBuilder: KtSymbolByFirBuilder
|
private val firSymbolBuilder: KtSymbolByFirBuilder
|
||||||
) : KtSymbolProvider(), InvalidatableByValidityToken {
|
) : KtSymbolProvider(), ValidityOwnerByValidityToken {
|
||||||
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 {
|
||||||
|
|||||||
+2
-2
@@ -8,7 +8,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
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.symbols.KtTypeAliasSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeAliasSymbol
|
||||||
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirTypeAliasSymbol(
|
internal class KtFirTypeAliasSymbol(
|
||||||
fir: FirTypeAlias,
|
fir: FirTypeAlias,
|
||||||
override val token: Invalidatable
|
override val token: ValidityOwner
|
||||||
) : KtTypeAliasSymbol(), KtFirSymbol<FirTypeAlias> {
|
) : KtTypeAliasSymbol(), KtFirSymbol<FirTypeAlias> {
|
||||||
override val fir: FirTypeAlias by ReadOnlyWeakRef(fir, this)
|
override val fir: FirTypeAlias by ReadOnlyWeakRef(fir, this)
|
||||||
override val psi: PsiElement? by cached { fir.findPsi(fir.session) }
|
override val psi: PsiElement? by cached { fir.findPsi(fir.session) }
|
||||||
|
|||||||
+2
-2
@@ -8,7 +8,7 @@ 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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
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 +17,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
|
|
||||||
internal class KtFirTypeParameterSymbol(
|
internal class KtFirTypeParameterSymbol(
|
||||||
fir: FirTypeParameter,
|
fir: FirTypeParameter,
|
||||||
override val token: Invalidatable
|
override val token: ValidityOwner
|
||||||
) : 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) }
|
||||||
|
|||||||
+4
-4
@@ -5,16 +5,16 @@
|
|||||||
|
|
||||||
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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
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 invalidatable: Invalidatable) {
|
class ReadOnlyWeakRef<V : Any>(value: V, val validityOwner: ValidityOwner) {
|
||||||
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 (invalidatable.isValid()) {
|
weakRef.get() ?: if (validityOwner.isValid()) {
|
||||||
error("Cone type was garbage collected while analysis session is still valid")
|
error("Cone type was garbage collected while analysis session is still valid")
|
||||||
} else {
|
} else {
|
||||||
error("Accessing the invalid coneType")
|
error("Accessing the invalid coneType")
|
||||||
@@ -22,4 +22,4 @@ class ReadOnlyWeakRef<V : Any>(value: V, val invalidatable: Invalidatable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
internal inline fun <V : Any> Invalidatable.weakRef(value: V) = ReadOnlyWeakRef(value, this)
|
internal inline fun <V : Any> ValidityOwner.weakRef(value: V) = ReadOnlyWeakRef(value, this)
|
||||||
+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.Invalidatable
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.InvalidatableByValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityOwnerByValidityToken
|
||||||
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
|
||||||
@@ -14,14 +14,14 @@ import kotlin.reflect.KProperty
|
|||||||
// all access are considered to be from a single thread
|
// all access are considered to be from a single thread
|
||||||
// which should be checked in invalidatable.assertIsValid()
|
// which should be checked in invalidatable.assertIsValid()
|
||||||
class ValidityAwareCachedValue<T>(
|
class ValidityAwareCachedValue<T>(
|
||||||
private val invalidatable: Invalidatable,
|
private val validityOwner: ValidityOwner,
|
||||||
private val init: () -> T
|
private val init: () -> T
|
||||||
) : ReadOnlyProperty<Any, T> {
|
) : ReadOnlyProperty<Any, T> {
|
||||||
var value: Any? = UNITITIALIZED
|
var value: Any? = UNITITIALIZED
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun getValue(thisRef: Any, property: KProperty<*>): T {
|
override fun getValue(thisRef: Any, property: KProperty<*>): T {
|
||||||
invalidatable.assertIsValid()
|
validityOwner.assertIsValid()
|
||||||
if (value === UNITITIALIZED) {
|
if (value === UNITITIALIZED) {
|
||||||
value = init()
|
value = init()
|
||||||
}
|
}
|
||||||
@@ -29,6 +29,6 @@ class ValidityAwareCachedValue<T>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun <T> InvalidatableByValidityToken.cached(init: () -> T) = ValidityAwareCachedValue(token, init)
|
internal fun <T> ValidityOwnerByValidityToken.cached(init: () -> T) = ValidityAwareCachedValue(token, init)
|
||||||
|
|
||||||
internal object UNITITIALIZED
|
internal object UNITITIALIZED
|
||||||
Reference in New Issue
Block a user