diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/DebugSymbolRenderer.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/DebugSymbolRenderer.kt index f51dd39bb8f..8fddc172ddb 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/DebugSymbolRenderer.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/DebugSymbolRenderer.kt @@ -66,5 +66,5 @@ object DebugSymbolRenderer { else -> value::class.simpleName!! } - private val ignoredPropertyNames = setOf("firRef", "psi", "token") + private val ignoredPropertyNames = setOf("firRef", "psi", "token", "builder") } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt index 493688cf636..ced47ce6f20 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -147,7 +147,7 @@ internal class KtSymbolByFirBuilder private constructor( fun buildAnonymousFunctionSymbol(fir: FirAnonymousFunction) = 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) { when { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt index a63b83bc79d..00783235d98 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt @@ -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.utils.cached 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.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer @@ -23,8 +24,9 @@ internal class KtFirAnonymousFunctionSymbol( fir: FirAnonymousFunction, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtAnonymousFunctionSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt index d36a66db2d6..9ddfbc4a5d9 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt @@ -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.utils.cached 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.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind @@ -29,9 +30,9 @@ internal class KtFirAnonymousObjectSymbol( fir: FirAnonymousObject, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtAnonymousObjectSymbol(), KtFirSymbol { - + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val symbolKind: KtSymbolKind = KtSymbolKind.LOCAL override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt index be274eb3578..43e5f1ce2ad 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt @@ -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.utils.cached 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.KtClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* @@ -31,8 +32,9 @@ internal class KtFirClassOrObjectSymbol( fir: FirRegularClass, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtClassOrObjectSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val name: Name get() = firRef.withFir { it.symbol.classId.shortClassName } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt index 494acdbf6d5..250e44b0893 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt @@ -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.utils.cached 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.KtConstructorSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall @@ -37,8 +38,9 @@ internal class KtFirConstructorSymbol( fir: FirConstructor, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtConstructorSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt index 4c78025dc82..78d94cc2aad 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorValueParameterSymbol.kt @@ -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.utils.cached 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.KtConstructorParameterSymbolKind import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall @@ -31,8 +32,9 @@ internal class KtFirConstructorValueParameterSymbol( fir: FirValueParameter, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtConstructorParameterSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt index 660bf83b3b4..21f11a564f1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirEnumEntrySymbol.kt @@ -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.utils.cached 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.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer @@ -28,8 +29,9 @@ internal class KtFirEnumEntrySymbol( fir: FirEnumEntry, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtEnumEntrySymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFileSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFileSymbol.kt index 76e1709e59e..5940d6f4c9d 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFileSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFileSymbol.kt @@ -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.utils.cached 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.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithDeclarations @@ -27,9 +28,7 @@ internal class KtFirFileSymbol( fir: FirFile, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder ) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol { - override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt index 06f4762cb9c..43ed88bf99d 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt @@ -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.utils.cached 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.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException @@ -33,8 +34,9 @@ internal class KtFirFunctionSymbol( fir: FirSimpleFunction, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtFunctionSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val name: Name get() = firRef.withFir { it.name } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt index 6b6615ea4b0..7e7309e7354 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionValueParameterSymbol.kt @@ -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.utils.cached 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.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations @@ -29,8 +30,9 @@ internal class KtFirFunctionValueParameterSymbol( fir: FirValueParameter, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtFunctionParameterSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt index b39e8a0dbec..fc623708da6 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirJavaFieldSymbol.kt @@ -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.utils.cached 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.markers.KtCommonSymbolModality import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility @@ -27,8 +28,9 @@ internal class KtFirJavaFieldSymbol( fir: FirField, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtJavaFieldSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirKotlinPropertySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirKotlinPropertySymbol.kt index dc22f4ea21f..7ef45e945b0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirKotlinPropertySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirKotlinPropertySymbol.kt @@ -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.convertConstantExpression 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.KtPropertyGetterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol @@ -38,13 +39,14 @@ internal class KtFirKotlinPropertySymbol( fir: FirProperty, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtKotlinPropertySymbol(), KtFirSymbol { init { assert(!fir.isLocal) check(fir !is FirSyntheticProperty) } + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt index 44e7a5f9cb5..ee7a764eb4e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirLocalVariableSymbol.kt @@ -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.utils.cached 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.markers.KtSymbolKind import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations @@ -26,13 +27,14 @@ internal class KtFirLocalVariableSymbol( fir: FirProperty, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtLocalVariableSymbol(), KtFirSymbol { init { assert(fir.isLocal) } + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt index 3a2cb873b1b..8f7baa8b2c0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertyGetterSymbol.kt @@ -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.utils.cached 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.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer @@ -28,12 +29,13 @@ internal class KtFirPropertyGetterSymbol( fir: FirPropertyAccessor, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder, + _builder: KtSymbolByFirBuilder, ) : KtPropertyGetterSymbol(), KtFirSymbol { init { require(fir.isGetter) } + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt index e0d46ef26ee..efb999e2ff1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPropertySetterSymbol.kt @@ -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.utils.cached 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.KtSetterParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* @@ -29,12 +30,13 @@ internal class KtFirPropertySetterSymbol( fir: FirPropertyAccessor, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder, + _builder: KtSymbolByFirBuilder, ) : KtPropertySetterSymbol(), KtFirSymbol { init { require(fir.isSetter) } + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSetterParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSetterParameterSymbol.kt index 695d727f7b7..e37a62e65dc 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSetterParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSetterParameterSymbol.kt @@ -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.utils.cached 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.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations @@ -29,8 +30,9 @@ internal class KtFirSetterParameterSymbol( fir: FirValueParameter, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtSetterParameterSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt index 852381c17be..a5c0a3b95a0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt @@ -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.convertConstantExpression 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.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException @@ -36,8 +37,9 @@ internal class KtFirSyntheticJavaPropertySymbol( fir: FirSyntheticProperty, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtSyntheticJavaPropertySymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt index 0dd992d5012..cf566ce680e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt @@ -20,9 +20,10 @@ import org.jetbrains.kotlin.idea.frontend.api.types.KtType internal class KtFirTypeAndAnnotations( private val containingDeclaration: FirRefWithValidityCheck, typeResolvePhase: FirResolvePhase, - private val builder: KtSymbolByFirBuilder, + _builder: KtSymbolByFirBuilder, private val typeRef: (T) -> FirTypeRef, ) : KtTypeAndAnnotations() { + private val builder by weakRef(_builder) override val token: ValidityToken get() = containingDeclaration.token diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt index 97a2dd5def3..7b7a1cf9692 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeParameterSymbol.kt @@ -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.fir.KtSymbolByFirBuilder 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.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer @@ -24,8 +25,9 @@ internal class KtFirTypeParameterSymbol( fir: FirTypeParameter, resolveState: FirModuleResolveState, override val token: ValidityToken, - private val builder: KtSymbolByFirBuilder + _builder: KtSymbolByFirBuilder ) : KtTypeParameterSymbol(), KtFirSymbol { + private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) }