From 8c2cb4f621cb98587a1ce636aa9c12fca4b09a30 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 25 Jan 2023 12:31:00 +0100 Subject: [PATCH] [SLC] introduce EmptyAnnotationsBox ^KT-56046 --- .../symbol/annotations/EmptyAnnotationsBox.kt | 14 ++++++++ .../fields/SymbolLightFieldForProperty.kt | 33 ++++++++++--------- .../methods/SymbolLightNoArgConstructor.kt | 6 +++- ...ightRepeatableAnnotationContainerMethod.kt | 4 +-- .../symbol/methods/SymbolLightSimpleMethod.kt | 5 +-- 5 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsBox.kt diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsBox.kt new file mode 100644 index 00000000000..5e40ba61107 --- /dev/null +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/EmptyAnnotationsBox.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.light.classes.symbol.annotations + +import com.intellij.psi.PsiAnnotation +import com.intellij.psi.PsiModifierList + +object EmptyAnnotationsBox : AnnotationsBox { + override fun annotations(owner: PsiModifierList): Array = PsiAnnotation.EMPTY_ARRAY + override fun findAnnotation(owner: PsiModifierList, qualifiedName: String): PsiAnnotation? = null +} diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt index b4730efdfbf..ece79f53b40 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.light.classes.symbol.* +import org.jetbrains.kotlin.light.classes.symbol.annotations.SimpleAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase @@ -145,23 +146,23 @@ internal class SymbolLightFieldForProperty private constructor( SymbolLightMemberModifierList( containingDeclaration = this, - initialValue = initializerValue, - lazyModifiersComputer = ::computeModifiers, - ) { modifierList -> - withPropertySymbol { propertySymbol -> - val nullability = if (!(propertySymbol is KtKotlinPropertySymbol && propertySymbol.isLateInit)) { - getTypeNullability(propertySymbol.returnType) - } else { - NullabilityType.Unknown - } + modifiersBox = LazyModifiersBox(initializerValue, ::computeModifiers), + annotationsBox = SimpleAnnotationsBox { modifierList -> + withPropertySymbol { propertySymbol -> + val nullability = if (!(propertySymbol is KtKotlinPropertySymbol && propertySymbol.isLateInit)) { + getTypeNullability(propertySymbol.returnType) + } else { + NullabilityType.Unknown + } - propertySymbol.computeAnnotations( - modifierList = modifierList, - nullability = nullability, - annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD, - ) - } - } + propertySymbol.computeAnnotations( + modifierList = modifierList, + nullability = nullability, + annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD, + ) + } + }, + ) } override fun getModifierList(): PsiModifierList = _modifierList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt index 1ca26e27fee..4e1f2d2836d 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase +import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SimpleModifiersBox import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList @@ -36,7 +37,10 @@ internal class SymbolLightNoArgConstructor( override fun isDeprecated(): Boolean = false private val _modifierList: PsiModifierList by lazyPub { - SymbolLightMemberModifierList(containingDeclaration = this, staticModifiers = setOf(visibility), annotationsComputer = null) + SymbolLightMemberModifierList( + containingDeclaration = this, + modifiersBox = SimpleModifiersBox(visibility), + ) } override fun getModifierList(): PsiModifierList = _modifierList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightRepeatableAnnotationContainerMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightRepeatableAnnotationContainerMethod.kt index 7bcc3355a40..03b47a4e70d 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightRepeatableAnnotationContainerMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightRepeatableAnnotationContainerMethod.kt @@ -9,6 +9,7 @@ import com.intellij.psi.* import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase +import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SimpleModifiersBox import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList @@ -31,8 +32,7 @@ internal class SymbolLightRepeatableAnnotationContainerMethod( private val _modifierList by lazyPub { SymbolLightMemberModifierList( containingDeclaration = this, - staticModifiers = setOf(PsiModifier.PUBLIC, PsiModifier.ABSTRACT), - annotationsComputer = null, + modifiersBox = SimpleModifiersBox(PsiModifier.PUBLIC, PsiModifier.ABSTRACT), ) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt index debf9917d35..3894fbf4cbd 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightSimpleMethod.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.light.classes.symbol.* +import org.jetbrains.kotlin.light.classes.symbol.annotations.SimpleAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.hasInlineOnlyAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation @@ -158,8 +159,8 @@ internal class SymbolLightSimpleMethod( private val _modifierList: PsiModifierList by lazyPub { SymbolLightMemberModifierList( containingDeclaration = this, - lazyModifiersComputer = ::computeModifiers, - annotationsComputer = ::computeAnnotations, + modifiersBox = LazyModifiersBox(computer = ::computeModifiers), + annotationsBox = SimpleAnnotationsBox(::computeAnnotations), ) }