[SLC] introduce EmptyAnnotationsBox

^KT-56046
This commit is contained in:
Dmitrii Gridin
2023-01-25 12:31:00 +01:00
committed by Space Team
parent ad4f6b25ca
commit 8c2cb4f621
5 changed files with 41 additions and 21 deletions
@@ -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> = PsiAnnotation.EMPTY_ARRAY
override fun findAnnotation(owner: PsiModifierList, qualifiedName: String): PsiAnnotation? = null
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.light.classes.symbol.* 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.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
@@ -145,23 +146,23 @@ internal class SymbolLightFieldForProperty private constructor(
SymbolLightMemberModifierList( SymbolLightMemberModifierList(
containingDeclaration = this, containingDeclaration = this,
initialValue = initializerValue, modifiersBox = LazyModifiersBox(initializerValue, ::computeModifiers),
lazyModifiersComputer = ::computeModifiers, annotationsBox = SimpleAnnotationsBox { modifierList ->
) { modifierList -> withPropertySymbol { propertySymbol ->
withPropertySymbol { propertySymbol -> val nullability = if (!(propertySymbol is KtKotlinPropertySymbol && propertySymbol.isLateInit)) {
val nullability = if (!(propertySymbol is KtKotlinPropertySymbol && propertySymbol.isLateInit)) { getTypeNullability(propertySymbol.returnType)
getTypeNullability(propertySymbol.returnType) } else {
} else { NullabilityType.Unknown
NullabilityType.Unknown }
}
propertySymbol.computeAnnotations( propertySymbol.computeAnnotations(
modifierList = modifierList, modifierList = modifierList,
nullability = nullability, nullability = nullability,
annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD, annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD,
) )
} }
} },
)
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase 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.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
@@ -36,7 +37,10 @@ internal class SymbolLightNoArgConstructor(
override fun isDeprecated(): Boolean = false override fun isDeprecated(): Boolean = false
private val _modifierList: PsiModifierList by lazyPub { 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 override fun getModifierList(): PsiModifierList = _modifierList
@@ -9,6 +9,7 @@ import com.intellij.psi.*
import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase 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.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
@@ -31,8 +32,7 @@ internal class SymbolLightRepeatableAnnotationContainerMethod(
private val _modifierList by lazyPub { private val _modifierList by lazyPub {
SymbolLightMemberModifierList( SymbolLightMemberModifierList(
containingDeclaration = this, containingDeclaration = this,
staticModifiers = setOf(PsiModifier.PUBLIC, PsiModifier.ABSTRACT), modifiersBox = SimpleModifiersBox(PsiModifier.PUBLIC, PsiModifier.ABSTRACT),
annotationsComputer = null,
) )
} }
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.light.classes.symbol.* 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.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasInlineOnlyAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasInlineOnlyAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation
@@ -158,8 +159,8 @@ internal class SymbolLightSimpleMethod(
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
SymbolLightMemberModifierList( SymbolLightMemberModifierList(
containingDeclaration = this, containingDeclaration = this,
lazyModifiersComputer = ::computeModifiers, modifiersBox = LazyModifiersBox(computer = ::computeModifiers),
annotationsComputer = ::computeAnnotations, annotationsBox = SimpleAnnotationsBox(::computeAnnotations),
) )
} }