diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAdditionalAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAdditionalAnnotationsProvider.kt index cf536054000..be07e0dca82 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAdditionalAnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/CompositeAdditionalAnnotationsProvider.kt @@ -9,6 +9,8 @@ import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiModifierList internal class CompositeAdditionalAnnotationsProvider(val providers: List) : AdditionalAnnotationsProvider { + constructor(vararg providers: AdditionalAnnotationsProvider) : this(providers.toList()) + override fun addAllAnnotations( currentRawAnnotations: MutableList, foundQualifiers: MutableSet, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/NullabilityAnnotationsProvider.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/NullabilityAnnotationsProvider.kt index 97556682dc0..c269880df8d 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/NullabilityAnnotationsProvider.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/NullabilityAnnotationsProvider.kt @@ -7,10 +7,13 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiModifierList +import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.load.java.JvmAnnotationNames internal class NullabilityAnnotationsProvider(private val lazyNullabilityType: Lazy) : AdditionalAnnotationsProvider { + constructor(initializer: () -> NullabilityType) : this(lazyPub(initializer)) + override fun addAllAnnotations( currentRawAnnotations: MutableList, foundQualifiers: MutableSet, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt index 7c7e3bc2963..15d632150b7 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt @@ -25,9 +25,8 @@ import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.light.classes.symbol.NullabilityType -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.LazyAnnotationsBox +import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider 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.methods.SymbolLightSimpleMethod @@ -89,15 +88,9 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC SymbolLightClassModifierList( containingDeclaration = this, modifiersBox = LazyModifiersBox(computer = ::computeModifiers), - annotationsBox = SimpleAnnotationsBox { modifierList -> - withClassOrObjectSymbol { classOrObjectSymbol -> - classOrObjectSymbol.computeAnnotations( - modifierList = modifierList, - nullability = NullabilityType.Unknown, - annotationUseSiteTarget = null, - ) - } - }, + annotationsBox = LazyAnnotationsBox( + annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer) + ), ) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceOrAnnotationClass.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceOrAnnotationClass.kt index 4a078dcedbd..abf11bab63c 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceOrAnnotationClass.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForInterfaceOrAnnotationClass.kt @@ -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.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightField -import org.jetbrains.kotlin.light.classes.symbol.NullabilityType -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.LazyAnnotationsBox +import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider 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.with @@ -72,15 +71,9 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi initialValue = LazyModifiersBox.MODALITY_MODIFIERS_MAP.with(PsiModifier.ABSTRACT), computer = ::computeModifiers ), - annotationsBox = SimpleAnnotationsBox { modifierList -> - withClassOrObjectSymbol { classOrObjectSymbol -> - classOrObjectSymbol.computeAnnotations( - modifierList = modifierList, - nullability = NullabilityType.Unknown, - annotationUseSiteTarget = null, - ) - } - }, + annotationsBox = LazyAnnotationsBox( + annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer) + ), ) private val _modifierList: PsiModifierList? by lazyPub { diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt index 329689990d2..24fee04ae12 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt @@ -9,7 +9,6 @@ import com.intellij.psi.PsiIdentifier import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiType 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.KtReceiverParameterSymbol 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.codegen.AsmUtil import org.jetbrains.kotlin.light.classes.symbol.* -import org.jetbrains.kotlin.light.classes.symbol.annotations.SimpleAnnotationsBox -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.annotations.* import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.psi.KtParameter @@ -71,16 +68,17 @@ internal class SymbolLightParameterForReceiver private constructor( private val _modifierList: PsiModifierList by lazyPub { SymbolLightClassModifierList( containingDeclaration = this, - annotationsBox = SimpleAnnotationsBox { modifierList -> - withReceiverSymbol { receiver -> - buildList { - receiver.type.nullabilityType.computeNullabilityAnnotation(modifierList)?.let(::add) - receiver.annotations.mapTo(this) { - SymbolLightAnnotationForAnnotationCall(it, modifierList) + annotationsBox = LazyAnnotationsBox( + annotationsProvider = SymbolAnnotationsProvider(ktModule, receiverPointer), + additionalAnnotationsProvider = CompositeAdditionalAnnotationsProvider( + DefaultAnnotationsProvider, + NullabilityAnnotationsProvider { + withReceiverSymbol { receiver -> + receiver.type.nullabilityType } - } - } - }, + }, + ) + ), ) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt index 5346ddc1a4f..75bbb506bd4 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters import com.intellij.psi.PsiIdentifier import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiType -import org.jetbrains.annotations.NotNull import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.components.buildClassType 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.asJava.classes.lazyPub 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.annotations.SymbolLightSimpleAnnotation +import org.jetbrains.kotlin.light.classes.symbol.NullabilityType +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.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList @@ -55,12 +56,15 @@ internal class SymbolLightSuspendContinuationParameter( private val _modifierList: PsiModifierList by lazyPub { SymbolLightClassModifierList( containingDeclaration = this, - annotationsBox = SimpleAnnotationsBox { modifierList -> - if (withFunctionSymbol { it.visibility.isPrivateOrPrivateToThis() }) - emptyList() - else - listOf(SymbolLightSimpleAnnotation(NotNull::class.java.name, modifierList)) - }, + annotationsBox = LazyAnnotationsBox( + annotationsProvider = EmptyAnnotationsProvider, + additionalAnnotationsProvider = NullabilityAnnotationsProvider { + if (withFunctionSymbol { it.visibility.isPrivateOrPrivateToThis() }) + NullabilityType.Unknown + else + NullabilityType.NotNull + }, + ), ) }