[ULC] Add support @receiver annotation site to UL classes

This commit is contained in:
Igor Yakovlev
2020-07-28 23:34:58 +03:00
parent dbb4337ac4
commit 2c16ae968d
2 changed files with 26 additions and 10 deletions
@@ -190,16 +190,7 @@ internal class KtUltraLightParameterForSetterParameter(
override fun tryGetKotlinType(): KotlinType? = property.getKotlinType()
override val givenAnnotations: List<KtLightAbstractAnnotation>?
get() = property.annotationEntries.filter {
it.useSiteTarget?.getAnnotationUseSiteTarget() == AnnotationUseSiteTarget.SETTER_PARAMETER
}.map { entry ->
KtLightAnnotationForSourceEntry(
lazyQualifiedName = { entry.analyzeAnnotation()?.fqName?.asString() },
kotlinOrigin = entry,
parent = this,
lazyClsDelegate = null
)
}
get() = property.annotationEntries.toLightAnnotations(this, AnnotationUseSiteTarget.SETTER_PARAMETER)
override fun isVarArgs(): Boolean = false
}
@@ -217,6 +208,14 @@ internal class KtUltraLightReceiverParameter(
containingDeclaration = containingDeclaration
) {
override val givenAnnotations: List<KtLightAbstractAnnotation>? =
containingDeclaration
.receiverTypeReference
?.modifierList
?.annotationEntries
?.toLightAnnotations(this, AnnotationUseSiteTarget.RECEIVER)
?: emptyList()
override fun isVarArgs(): Boolean = false
override fun tryGetKotlinType(): KotlinType? =
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
import org.jetbrains.kotlin.asJava.UltraLightClassModifierExtension
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
import org.jetbrains.kotlin.asJava.elements.KotlinLightTypeParameterListBuilder
import org.jetbrains.kotlin.asJava.elements.KtLightAnnotationForSourceEntry
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.asJava.elements.psiType
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
@@ -41,6 +42,7 @@ import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.FqName
@@ -518,3 +520,18 @@ internal fun KtUltraLightSupport.findAnnotation(owner: KtAnnotated, fqName: FqNa
return null
}
internal fun List<KtAnnotationEntry>.toLightAnnotations(
parent: PsiElement,
site: AnnotationUseSiteTarget
): List<KtLightAnnotationForSourceEntry> =
filter {
it.useSiteTarget?.getAnnotationUseSiteTarget() == site
}.map { entry ->
KtLightAnnotationForSourceEntry(
lazyQualifiedName = { entry.analyzeAnnotation()?.fqName?.asString() },
kotlinOrigin = entry,
parent = parent,
lazyClsDelegate = null
)
}