From 1d62445b880bb7677350e1c34f4556e214fd09c3 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 24 Nov 2022 15:44:31 +0100 Subject: [PATCH] [SLC] fix leak from annotations ^KT-54051 --- .../light/classes/symbol/classes/SymbolLightClass.kt | 12 +++++++----- .../symbol/classes/SymbolLightClassForFacade.kt | 10 +++++----- .../classes/SymbolLightInterfaceOrAnnotationClass.kt | 12 +++++++----- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt index 0c07ba92583..4f79ac7d4a0 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt @@ -51,8 +51,8 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K } private val _modifierList: PsiModifierList? by lazyPub { - withNamedClassOrObjectSymbol { classOrObjectSymbol -> - val lazyModifiers = lazy { + val lazyModifiers = lazy { + withNamedClassOrObjectSymbol { classOrObjectSymbol -> buildSet { add(classOrObjectSymbol.toPsiVisibilityForClass(isNested = !isTopLevel)) addIfNotNull(classOrObjectSymbol.computeSimpleModality()) @@ -61,17 +61,19 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K } } } + } - val lazyAnnotations = lazyPub { + val lazyAnnotations = lazyPub { + withNamedClassOrObjectSymbol { classOrObjectSymbol -> classOrObjectSymbol.computeAnnotations( parent = this@SymbolLightClass, nullability = NullabilityType.Unknown, annotationUseSiteTarget = null, ) } - - SymbolLightClassModifierList(this@SymbolLightClass, lazyModifiers, lazyAnnotations) } + + SymbolLightClassModifierList(this@SymbolLightClass, lazyModifiers, lazyAnnotations) } override fun getModifierList(): PsiModifierList? = _modifierList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForFacade.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForFacade.kt index d9a63467a2b..fa050e438ef 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForFacade.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForFacade.kt @@ -69,20 +69,20 @@ class SymbolLightClassForFacade( val lazyModifiers = lazyOf(setOf(PsiModifier.PUBLIC, PsiModifier.FINAL)) - withFileSymbols { fileSymbols -> - val lazyAnnotations = lazyPub { + val lazyAnnotations = lazyPub { + withFileSymbols { fileSymbols -> fileSymbols.flatMap { it.computeAnnotations( this@SymbolLightClassForFacade, NullabilityType.Unknown, AnnotationUseSiteTarget.FILE, - includeAnnotationsWithoutSite = false + includeAnnotationsWithoutSite = false, ) } } - - SymbolLightClassModifierList(this@SymbolLightClassForFacade, lazyModifiers, lazyAnnotations) } + + SymbolLightClassModifierList(this@SymbolLightClassForFacade, lazyModifiers, lazyAnnotations) } override fun getModifierList(): PsiModifierList = _modifierList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightInterfaceOrAnnotationClass.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightInterfaceOrAnnotationClass.kt index e72d8109bd6..b16a3a453b5 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightInterfaceOrAnnotationClass.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightInterfaceOrAnnotationClass.kt @@ -25,8 +25,8 @@ internal abstract class SymbolLightInterfaceOrAnnotationClass(classOrObject: KtC } private val _modifierList: PsiModifierList? by lazyPub { - withNamedClassOrObjectSymbol { classOrObjectSymbol -> - val lazyModifiers = lazy { + val lazyModifiers = lazy { + withNamedClassOrObjectSymbol { classOrObjectSymbol -> buildSet { add(classOrObjectSymbol.toPsiVisibilityForClass(isNested = !isTopLevel)) add(PsiModifier.ABSTRACT) @@ -35,17 +35,19 @@ internal abstract class SymbolLightInterfaceOrAnnotationClass(classOrObject: KtC } } } + } - val lazyAnnotations = lazyPub { + val lazyAnnotations = lazyPub { + withNamedClassOrObjectSymbol { classOrObjectSymbol -> classOrObjectSymbol.computeAnnotations( parent = this@SymbolLightInterfaceOrAnnotationClass, nullability = NullabilityType.Unknown, annotationUseSiteTarget = null, ) } - - SymbolLightClassModifierList(this@SymbolLightInterfaceOrAnnotationClass, lazyModifiers, lazyAnnotations) } + + SymbolLightClassModifierList(this@SymbolLightInterfaceOrAnnotationClass, lazyModifiers, lazyAnnotations) } override fun isInterface(): Boolean = true