From 2c16ae968db5b00ced46b516da9cc314442fc617 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Tue, 28 Jul 2020 23:34:58 +0300 Subject: [PATCH] [ULC] Add support @receiver annotation site to UL classes --- .../asJava/classes/ultraLightParameters.kt | 19 +++++++++---------- .../kotlin/asJava/classes/ultraLightUtils.kt | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt index 8bdc9531c59..946dd2e711c 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt @@ -190,16 +190,7 @@ internal class KtUltraLightParameterForSetterParameter( override fun tryGetKotlinType(): KotlinType? = property.getKotlinType() override val givenAnnotations: List? - 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? = + containingDeclaration + .receiverTypeReference + ?.modifierList + ?.annotationEntries + ?.toLightAnnotations(this, AnnotationUseSiteTarget.RECEIVER) + ?: emptyList() + override fun isVarArgs(): Boolean = false override fun tryGetKotlinType(): KotlinType? = diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt index 8fdbefeb061..e3f93c8d1ac 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt @@ -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.toLightAnnotations( + parent: PsiElement, + site: AnnotationUseSiteTarget +): List = + filter { + it.useSiteTarget?.getAnnotationUseSiteTarget() == site + }.map { entry -> + KtLightAnnotationForSourceEntry( + lazyQualifiedName = { entry.analyzeAnnotation()?.fqName?.asString() }, + kotlinOrigin = entry, + parent = parent, + lazyClsDelegate = null + ) + } \ No newline at end of file