FIR IDE: fix memory leak in symbols by firBuilder

This commit is contained in:
Ilya Kirillov
2021-02-07 20:24:01 +01:00
parent cf3defbc9c
commit ede5fef39c
20 changed files with 53 additions and 22 deletions
@@ -66,5 +66,5 @@ object DebugSymbolRenderer {
else -> value::class.simpleName!! else -> value::class.simpleName!!
} }
private val ignoredPropertyNames = setOf("firRef", "psi", "token") private val ignoredPropertyNames = setOf("firRef", "psi", "token", "builder")
} }
@@ -147,7 +147,7 @@ internal class KtSymbolByFirBuilder private constructor(
fun buildAnonymousFunctionSymbol(fir: FirAnonymousFunction) = fun buildAnonymousFunctionSymbol(fir: FirAnonymousFunction) =
symbolsCache.cache(fir) { KtFirAnonymousFunctionSymbol(fir, resolveState, token, this) } symbolsCache.cache(fir) { KtFirAnonymousFunctionSymbol(fir, resolveState, token, this) }
fun buildFileSymbol(fir: FirFile) = filesCache.cache(fir) { KtFirFileSymbol(fir, resolveState, token, this) } fun buildFileSymbol(fir: FirFile) = filesCache.cache(fir) { KtFirFileSymbol(fir, resolveState, token) }
fun buildVariableSymbol(fir: FirProperty): KtVariableSymbol = symbolsCache.cache(fir) { fun buildVariableSymbol(fir: FirProperty): KtVariableSymbol = symbolsCache.cache(fir) {
when { when {
@@ -14,6 +14,7 @@ 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.fir.utils.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
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.symbols.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
@@ -23,8 +24,9 @@ internal class KtFirAnonymousFunctionSymbol(
fir: FirAnonymousFunction, fir: FirAnonymousFunction,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtAnonymousFunctionSymbol(), KtFirSymbol<FirAnonymousFunction> { ) : KtAnonymousFunctionSymbol(), KtFirSymbol<FirAnonymousFunction> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtAnonymousObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtAnonymousObjectSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
@@ -29,9 +30,9 @@ internal class KtFirAnonymousObjectSymbol(
fir: FirAnonymousObject, fir: FirAnonymousObject,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtAnonymousObjectSymbol(), KtFirSymbol<FirAnonymousObject> { ) : KtAnonymousObjectSymbol(), KtFirSymbol<FirAnonymousObject> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val symbolKind: KtSymbolKind = KtSymbolKind.LOCAL override val symbolKind: KtSymbolKind = KtSymbolKind.LOCAL
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotati
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbol import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbol
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind
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.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
@@ -31,8 +32,9 @@ internal class KtFirClassOrObjectSymbol(
fir: FirRegularClass, fir: FirRegularClass,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtClassOrObjectSymbol(), KtFirSymbol<FirRegularClass> { ) : KtClassOrObjectSymbol(), KtFirSymbol<FirRegularClass> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
override val name: Name get() = firRef.withFir { it.symbol.classId.shortClassName } override val name: Name get() = firRef.withFir { it.symbol.classId.shortClassName }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirConstruc
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
@@ -37,8 +38,9 @@ internal class KtFirConstructorSymbol(
fir: FirConstructor, fir: FirConstructor,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtConstructorSymbol(), KtFirSymbol<FirConstructor> { ) : KtConstructorSymbol(), KtFirSymbol<FirConstructor> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbolKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorParameterSymbolKind
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
@@ -31,8 +32,9 @@ internal class KtFirConstructorValueParameterSymbol(
fir: FirValueParameter, fir: FirValueParameter,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtConstructorParameterSymbol(), KtFirSymbol<FirValueParameter> { ) : KtConstructorParameterSymbol(), KtFirSymbol<FirValueParameter> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirEnumEntr
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
@@ -28,8 +29,9 @@ internal class KtFirEnumEntrySymbol(
fir: FirEnumEntry, fir: FirEnumEntry,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtEnumEntrySymbol(), KtFirSymbol<FirEnumEntry> { ) : KtEnumEntrySymbol(), KtFirSymbol<FirEnumEntry> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFileSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFileSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithDeclarations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithDeclarations
@@ -27,9 +28,7 @@ internal class KtFirFileSymbol(
fir: FirFile, fir: FirFile,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder
) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol<FirFile> { ) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol<FirFile> {
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirMemberFu
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignature
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
@@ -33,8 +34,9 @@ internal class KtFirFunctionSymbol(
fir: FirSimpleFunction, fir: FirSimpleFunction,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtFunctionSymbol(), KtFirSymbol<FirSimpleFunction> { ) : KtFunctionSymbol(), KtFirSymbol<FirSimpleFunction> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
override val name: Name get() = firRef.withFir { it.name } override val name: Name get() = firRef.withFir { it.name }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionParameterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
@@ -29,8 +30,9 @@ internal class KtFirFunctionValueParameterSymbol(
fir: FirValueParameter, fir: FirValueParameter,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtFunctionParameterSymbol(), KtFirSymbol<FirValueParameter> { ) : KtFunctionParameterSymbol(), KtFirSymbol<FirValueParameter> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -15,6 +15,7 @@ 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
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtJavaFieldSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtJavaFieldSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
@@ -27,8 +28,9 @@ internal class KtFirJavaFieldSymbol(
fir: FirField, fir: FirField,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtJavaFieldSymbol(), KtFirSymbol<FirField> { ) : KtJavaFieldSymbol(), KtFirSymbol<FirField> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignatu
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.convertConstantExpression import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtKotlinPropertySymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtKotlinPropertySymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
@@ -38,13 +39,14 @@ internal class KtFirKotlinPropertySymbol(
fir: FirProperty, fir: FirProperty,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtKotlinPropertySymbol(), KtFirSymbol<FirProperty> { ) : KtKotlinPropertySymbol(), KtFirSymbol<FirProperty> {
init { init {
assert(!fir.isLocal) assert(!fir.isLocal)
check(fir !is FirSyntheticProperty) check(fir !is FirSyntheticProperty)
} }
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -14,6 +14,7 @@ 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.fir.utils.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtLocalVariableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtLocalVariableSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
@@ -26,13 +27,14 @@ internal class KtFirLocalVariableSymbol(
fir: FirProperty, fir: FirProperty,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtLocalVariableSymbol(), ) : KtLocalVariableSymbol(),
KtFirSymbol<FirProperty> { KtFirSymbol<FirProperty> {
init { init {
assert(fir.isLocal) assert(fir.isLocal)
} }
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
@@ -28,12 +29,13 @@ internal class KtFirPropertyGetterSymbol(
fir: FirPropertyAccessor, fir: FirPropertyAccessor,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder, _builder: KtSymbolByFirBuilder,
) : KtPropertyGetterSymbol(), KtFirSymbol<FirPropertyAccessor> { ) : KtPropertyGetterSymbol(), KtFirSymbol<FirPropertyAccessor> {
init { init {
require(fir.isGetter) require(fir.isGetter)
} }
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
@@ -29,12 +30,13 @@ internal class KtFirPropertySetterSymbol(
fir: FirPropertyAccessor, fir: FirPropertyAccessor,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder, _builder: KtSymbolByFirBuilder,
) : KtPropertySetterSymbol(), KtFirSymbol<FirPropertyAccessor> { ) : KtPropertySetterSymbol(), KtFirSymbol<FirPropertyAccessor> {
init { init {
require(fir.isSetter) require(fir.isSetter)
} }
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotat
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList
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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
@@ -29,8 +30,9 @@ internal class KtFirSetterParameterSymbol(
fir: FirValueParameter, fir: FirValueParameter,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtSetterParameterSymbol(), KtFirSymbol<FirValueParameter> { ) : KtSetterParameterSymbol(), KtFirSymbol<FirValueParameter> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.createSignatu
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.convertConstantExpression import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
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.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
@@ -36,8 +37,9 @@ internal class KtFirSyntheticJavaPropertySymbol(
fir: FirSyntheticProperty, fir: FirSyntheticProperty,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtSyntheticJavaPropertySymbol(), KtFirSymbol<FirSyntheticProperty> { ) : KtSyntheticJavaPropertySymbol(), KtFirSymbol<FirSyntheticProperty> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }
@@ -20,9 +20,10 @@ import org.jetbrains.kotlin.idea.frontend.api.types.KtType
internal class KtFirTypeAndAnnotations<T : FirDeclaration>( internal class KtFirTypeAndAnnotations<T : FirDeclaration>(
private val containingDeclaration: FirRefWithValidityCheck<T>, private val containingDeclaration: FirRefWithValidityCheck<T>,
typeResolvePhase: FirResolvePhase, typeResolvePhase: FirResolvePhase,
private val builder: KtSymbolByFirBuilder, _builder: KtSymbolByFirBuilder,
private val typeRef: (T) -> FirTypeRef, private val typeRef: (T) -> FirTypeRef,
) : KtTypeAndAnnotations() { ) : KtTypeAndAnnotations() {
private val builder by weakRef(_builder)
override val token: ValidityToken get() = containingDeclaration.token override val token: ValidityToken get() = containingDeclaration.token
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken 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.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
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
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
@@ -24,8 +25,9 @@ internal class KtFirTypeParameterSymbol(
fir: FirTypeParameter, fir: FirTypeParameter,
resolveState: FirModuleResolveState, resolveState: FirModuleResolveState,
override val token: ValidityToken, override val token: ValidityToken,
private val builder: KtSymbolByFirBuilder _builder: KtSymbolByFirBuilder
) : KtTypeParameterSymbol(), KtFirSymbol<FirTypeParameter> { ) : KtTypeParameterSymbol(), KtFirSymbol<FirTypeParameter> {
private val builder by weakRef(_builder)
override val firRef = firRef(fir, resolveState) override val firRef = firRef(fir, resolveState)
override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }