From e0c23dae475b12cdfa5e6cc24b46cf64d0c0a307 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 3 Feb 2023 12:36:22 +0100 Subject: [PATCH] [Analysis API] optimize RAM consumption in KtTypes - remove cache allocation for cases when the value is fast to compute ^KTIJ-22749 --- .../analysis/api/fir/types/KtFirDefinitelyNotNullType.kt | 2 +- .../kotlin/analysis/api/fir/types/KtFirFlexibleType.kt | 4 ++-- .../kotlin/analysis/api/fir/types/KtFirUsualClassType.kt | 9 +++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt index 665cbecb32e..6ad06b7a4f2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt @@ -21,7 +21,7 @@ internal class KtFirDefinitelyNotNullType( override val token: KtLifetimeToken, private val builder: KtSymbolByFirBuilder, ) : KtDefinitelyNotNullType(), KtFirType { - override val original: KtType by cached { builder.typeBuilder.buildKtType(this.coneType.original) } + override val original: KtType = withValidityAssertion { builder.typeBuilder.buildKtType(this.coneType.original) } override val annotationsList: KtAnnotationsList by cached { KtFirAnnotationListForType.create(coneType, builder.rootSession, token) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt index 133f8193ac7..24028c5ea24 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt @@ -23,8 +23,8 @@ internal class KtFirFlexibleType( private val builder: KtSymbolByFirBuilder, ) : KtFlexibleType(), KtFirType { - override val lowerBound: KtType by cached { builder.typeBuilder.buildKtType(coneType.lowerBound) } - override val upperBound: KtType by cached { builder.typeBuilder.buildKtType(coneType.upperBound) } + override val lowerBound: KtType get() = withValidityAssertion { builder.typeBuilder.buildKtType(coneType.lowerBound) } + override val upperBound: KtType get() = withValidityAssertion { builder.typeBuilder.buildKtType(coneType.upperBound) } override val annotationsList: KtAnnotationsList by cached { KtFirAnnotationListForType.create(coneType, builder.rootSession, token) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt index 1e74f7094fe..f813b84217f 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt @@ -27,10 +27,11 @@ internal class KtFirUsualClassType( private val builder: KtSymbolByFirBuilder, ) : KtUsualClassType(), KtFirType { override val classId: ClassId get() = withValidityAssertion { coneType.lookupTag.classId } - override val classSymbol: KtClassLikeSymbol by cached { - builder.classifierBuilder.buildClassLikeSymbolByLookupTag(coneType.lookupTag) - ?: errorWithFirSpecificEntries("Class was not found", coneType = coneType) - } + override val classSymbol: KtClassLikeSymbol + get() = withValidityAssertion { + builder.classifierBuilder.buildClassLikeSymbolByLookupTag(coneType.lookupTag) + ?: errorWithFirSpecificEntries("Class was not found", coneType = coneType) + } override val qualifiers by cached { UsualClassTypeQualifierBuilder.buildQualifiers(coneType, builder)