[AA LC] Compute nullability annotation for parameter for extension receiver

This commit is contained in:
Dmitriy Novozhilov
2022-08-10 15:21:24 +03:00
parent c67ded2d3b
commit 77546e5e06
11 changed files with 50 additions and 19 deletions
@@ -91,6 +91,16 @@ internal fun KtAnnotatedSymbol.hasAnnotation(fqName: FqName, annotationUseSiteTa
it.useSiteTarget == annotationUseSiteTarget && it.classId?.asSingleFqName() == fqName
}
internal fun NullabilityType.computeNullabilityAnnotation(parent: PsiElement): SymbolLightSimpleAnnotation? {
return when (this) {
NullabilityType.NotNull -> NotNull::class.java
NullabilityType.Nullable -> Nullable::class.java
else -> null
}?.let {
SymbolLightSimpleAnnotation(it.name, parent)
}
}
internal fun KtAnnotatedSymbol.computeAnnotations(
parent: PsiElement,
nullability: NullabilityType,
@@ -98,13 +108,7 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
includeAnnotationsWithoutSite: Boolean = true
): List<PsiAnnotation> {
val nullabilityAnnotation = when (nullability) {
NullabilityType.NotNull -> NotNull::class.java
NullabilityType.Nullable -> Nullable::class.java
else -> null
}?.let {
SymbolLightSimpleAnnotation(it.name, parent)
}
val nullabilityAnnotation = nullability.computeNullabilityAnnotation(parent)
val parentIsAnnotation = (parent as? PsiClass)?.isAnnotationType == true
@@ -19,9 +19,11 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.codegen.AsmUtil
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.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.light.classes.symbol.nullabilityType
import org.jetbrains.kotlin.psi.KtParameter
context(KtAnalysisSession)
@@ -66,8 +68,11 @@ internal class SymbolLightParameterForReceiver private constructor(
override val kotlinOrigin: KtParameter? = null
private val _annotations: List<PsiAnnotation> by lazyPub {
receiverType.annotations.map {
SymbolLightAnnotationForAnnotationCall(it, this)
buildList {
receiverType.nullabilityType.computeNullabilityAnnotation(this@SymbolLightParameterForReceiver)?.let { add(it) }
receiverType.annotations.mapTo(this) {
SymbolLightAnnotationForAnnotationCall(it, this@SymbolLightParameterForReceiver)
}
}
}