[SLC] migrate some SimpleAnnotationsBox to LazyAnnotationsBox

^KT-56046
This commit is contained in:
Dmitrii Gridin
2023-01-25 14:49:28 +01:00
committed by Space Team
parent 2c7fb49a80
commit 5f6c1afa1f
6 changed files with 39 additions and 46 deletions
@@ -9,6 +9,8 @@ import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiModifierList
internal class CompositeAdditionalAnnotationsProvider(val providers: List<AdditionalAnnotationsProvider>) : AdditionalAnnotationsProvider { internal class CompositeAdditionalAnnotationsProvider(val providers: List<AdditionalAnnotationsProvider>) : AdditionalAnnotationsProvider {
constructor(vararg providers: AdditionalAnnotationsProvider) : this(providers.toList())
override fun addAllAnnotations( override fun addAllAnnotations(
currentRawAnnotations: MutableList<in PsiAnnotation>, currentRawAnnotations: MutableList<in PsiAnnotation>,
foundQualifiers: MutableSet<String>, foundQualifiers: MutableSet<String>,
@@ -7,10 +7,13 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations
import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiModifierList
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.JvmAnnotationNames
internal class NullabilityAnnotationsProvider(private val lazyNullabilityType: Lazy<NullabilityType>) : AdditionalAnnotationsProvider { internal class NullabilityAnnotationsProvider(private val lazyNullabilityType: Lazy<NullabilityType>) : AdditionalAnnotationsProvider {
constructor(initializer: () -> NullabilityType) : this(lazyPub(initializer))
override fun addAllAnnotations( override fun addAllAnnotations(
currentRawAnnotations: MutableList<in PsiAnnotation>, currentRawAnnotations: MutableList<in PsiAnnotation>,
foundQualifiers: MutableSet<String>, foundQualifiers: MutableSet<String>,
@@ -25,9 +25,8 @@ import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.SimpleAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod
@@ -89,15 +88,9 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
SymbolLightClassModifierList( SymbolLightClassModifierList(
containingDeclaration = this, containingDeclaration = this,
modifiersBox = LazyModifiersBox(computer = ::computeModifiers), modifiersBox = LazyModifiersBox(computer = ::computeModifiers),
annotationsBox = SimpleAnnotationsBox { modifierList -> annotationsBox = LazyAnnotationsBox(
withClassOrObjectSymbol { classOrObjectSymbol -> annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer)
classOrObjectSymbol.computeAnnotations( ),
modifierList = modifierList,
nullability = NullabilityType.Unknown,
annotationUseSiteTarget = null,
)
}
},
) )
} }
@@ -17,9 +17,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.SimpleAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with
@@ -72,15 +71,9 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
initialValue = LazyModifiersBox.MODALITY_MODIFIERS_MAP.with(PsiModifier.ABSTRACT), initialValue = LazyModifiersBox.MODALITY_MODIFIERS_MAP.with(PsiModifier.ABSTRACT),
computer = ::computeModifiers computer = ::computeModifiers
), ),
annotationsBox = SimpleAnnotationsBox { modifierList -> annotationsBox = LazyAnnotationsBox(
withClassOrObjectSymbol { classOrObjectSymbol -> annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer)
classOrObjectSymbol.computeAnnotations( ),
modifierList = modifierList,
nullability = NullabilityType.Unknown,
annotationUseSiteTarget = null,
)
}
},
) )
private val _modifierList: PsiModifierList? by lazyPub { private val _modifierList: PsiModifierList? by lazyPub {
@@ -9,7 +9,6 @@ import com.intellij.psi.PsiIdentifier
import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiModifierList
import com.intellij.psi.PsiType import com.intellij.psi.PsiType
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.annotations
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtReceiverParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtReceiverParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol
@@ -17,9 +16,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.AsmUtil
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.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightAnnotationForAnnotationCall
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeNullabilityAnnotation
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtParameter
@@ -71,16 +68,17 @@ internal class SymbolLightParameterForReceiver private constructor(
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
SymbolLightClassModifierList( SymbolLightClassModifierList(
containingDeclaration = this, containingDeclaration = this,
annotationsBox = SimpleAnnotationsBox { modifierList -> annotationsBox = LazyAnnotationsBox(
withReceiverSymbol { receiver -> annotationsProvider = SymbolAnnotationsProvider(ktModule, receiverPointer),
buildList { additionalAnnotationsProvider = CompositeAdditionalAnnotationsProvider(
receiver.type.nullabilityType.computeNullabilityAnnotation(modifierList)?.let(::add) DefaultAnnotationsProvider,
receiver.annotations.mapTo(this) { NullabilityAnnotationsProvider {
SymbolLightAnnotationForAnnotationCall(it, modifierList) withReceiverSymbol { receiver ->
receiver.type.nullabilityType
} }
} },
} )
}, ),
) )
} }
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.PsiIdentifier import com.intellij.psi.PsiIdentifier
import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiModifierList
import com.intellij.psi.PsiType import com.intellij.psi.PsiType
import org.jetbrains.annotations.NotNull
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.components.buildClassType import org.jetbrains.kotlin.analysis.api.components.buildClassType
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
@@ -16,8 +15,10 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThi
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
import org.jetbrains.kotlin.light.classes.symbol.annotations.SimpleAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.EmptyAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.isValid import org.jetbrains.kotlin.light.classes.symbol.isValid
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
@@ -55,12 +56,15 @@ internal class SymbolLightSuspendContinuationParameter(
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
SymbolLightClassModifierList( SymbolLightClassModifierList(
containingDeclaration = this, containingDeclaration = this,
annotationsBox = SimpleAnnotationsBox { modifierList -> annotationsBox = LazyAnnotationsBox(
if (withFunctionSymbol { it.visibility.isPrivateOrPrivateToThis() }) annotationsProvider = EmptyAnnotationsProvider,
emptyList() additionalAnnotationsProvider = NullabilityAnnotationsProvider {
else if (withFunctionSymbol { it.visibility.isPrivateOrPrivateToThis() })
listOf(SymbolLightSimpleAnnotation(NotNull::class.java.name, modifierList)) NullabilityType.Unknown
}, else
NullabilityType.NotNull
},
),
) )
} }