From c78d3edd24b38e53de063a41714e6feaf0939573 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 14 Feb 2024 17:06:45 +0100 Subject: [PATCH] [SLC] support type parameter annotations ^KT-65112 Fixed --- .../parameters/SymbolLightTypeParameter.kt | 17 ++++++++++++++--- ...lassTypeParameterAnnotation.descriptors.java | 3 +++ .../ClassTypeParameterAnnotation.java | 2 +- .../ClassTypeParameterAnnotation.lib.java | 3 --- ...faceTypeParameterAnnotation.descriptors.java | 2 ++ .../InterfaceTypeParameterAnnotation.java | 2 +- .../InterfaceTypeParameterAnnotation.lib.java | 2 -- ...thodTypeParameterAnnotation.descriptors.java | 5 +++++ .../MethodTypeParameterAnnotation.java | 2 +- .../MethodTypeParameterAnnotation.lib.java | 5 ----- .../PropertyTypeParameterAnnotation.java | 2 +- ...ionTypeParameterAnnotation.descriptors.java} | 2 +- .../FunctionTypeParameterAnnotation.java | 2 +- .../PropertyTypeParameterAnnotation.java | 2 +- 14 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.descriptors.java delete mode 100644 compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.lib.java create mode 100644 compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.descriptors.java delete mode 100644 compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.lib.java create mode 100644 compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.descriptors.java delete mode 100644 compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.lib.java rename compiler/testData/asJava/lightClasses/lightClassByFqName/facades/{FunctionTypeParameterAnnotation.lib.java => FunctionTypeParameterAnnotation.descriptors.java} (56%) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt index 0a0432ac370..103375c1fc3 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt @@ -28,6 +28,9 @@ import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.light.classes.symbol.* +import org.jetbrains.kotlin.light.classes.symbol.annotations.AnnotationsBox +import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox +import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -138,7 +141,6 @@ internal class SymbolLightTypeParameter private constructor( override fun hasModifierProperty(name: String): Boolean = false override fun getOwner(): PsiTypeParameterListOwner = parent.owner override fun getParent(): PsiElement = parent - override fun getAnnotations(): Array = PsiAnnotation.EMPTY_ARRAY override fun getContainingClass(): PsiClass? = null override fun getDocComment(): PsiDocComment? = null override fun isDeprecated(): Boolean = false @@ -153,7 +155,6 @@ internal class SymbolLightTypeParameter private constructor( override fun isInterface(): Boolean = false override fun isAnnotationType(): Boolean = false override fun isEnum(): Boolean = false - override fun findAnnotation(qualifiedName: String): PsiAnnotation? = null override fun addAnnotation(qualifiedName: String): PsiAnnotation = cannotModify() //End of PsiClass simple implementation @@ -164,7 +165,17 @@ internal class SymbolLightTypeParameter private constructor( override fun getName(): String = _name override fun getIndex(): Int = index - override fun getApplicableAnnotations(): Array = PsiAnnotation.EMPTY_ARRAY //TODO + + private val annotationsBox: AnnotationsBox = GranularAnnotationsBox( + annotationsProvider = SymbolAnnotationsProvider(ktModule, typeParameterSymbolPointer) + ) + + override fun getAnnotations(): Array = annotationsBox.annotationsArray(this) + override fun findAnnotation(qualifiedName: String): PsiAnnotation? = annotationsBox.findAnnotation(this, qualifiedName) + override fun getAnnotation(fqn: String): PsiAnnotation? = findAnnotation(fqn) + override fun hasAnnotation(fqn: String): Boolean = annotationsBox.hasAnnotation(this, fqn) + override fun getApplicableAnnotations(): Array = annotations + override fun toString(): String = "SymbolLightTypeParameter:$name" override fun getNavigationElement(): PsiElement = kotlinOrigin ?: parent.navigationElement diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.descriptors.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.descriptors.java new file mode 100644 index 00000000000..f77ce24e103 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.descriptors.java @@ -0,0 +1,3 @@ +public final class C /* one.C*/ { + public C();// .ctor() +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.java index f77ce24e103..763747c5ac0 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.java @@ -1,3 +1,3 @@ -public final class C /* one.C*/ { +public final class C /* one.C*/<@one.Anno() T> { public C();// .ctor() } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.lib.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.lib.java deleted file mode 100644 index 763747c5ac0..00000000000 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ClassTypeParameterAnnotation.lib.java +++ /dev/null @@ -1,3 +0,0 @@ -public final class C /* one.C*/<@one.Anno() T> { - public C();// .ctor() -} diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.descriptors.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.descriptors.java new file mode 100644 index 00000000000..6b202242049 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.descriptors.java @@ -0,0 +1,2 @@ +public abstract interface C /* one.C*/ { +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.java index 6b202242049..d6973b1d8fd 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.java @@ -1,2 +1,2 @@ -public abstract interface C /* one.C*/ { +public abstract interface C /* one.C*/<@one.Anno() T> { } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.lib.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.lib.java deleted file mode 100644 index d6973b1d8fd..00000000000 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/InterfaceTypeParameterAnnotation.lib.java +++ /dev/null @@ -1,2 +0,0 @@ -public abstract interface C /* one.C*/<@one.Anno() T> { -} diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.descriptors.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.descriptors.java new file mode 100644 index 00000000000..8e2fb90e3ec --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.descriptors.java @@ -0,0 +1,5 @@ +public final class C /* one.C*/ { + public C();// .ctor() + + public final void foo(T);// foo(T) +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.java index 8e2fb90e3ec..f83117e72f4 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.java @@ -1,5 +1,5 @@ public final class C /* one.C*/ { public C();// .ctor() - public final void foo(T);// foo(T) + public final <@one.Anno() T> void foo(T);// <@one.Anno() T> foo(T) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.lib.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.lib.java deleted file mode 100644 index f83117e72f4..00000000000 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/MethodTypeParameterAnnotation.lib.java +++ /dev/null @@ -1,5 +0,0 @@ -public final class C /* one.C*/ { - public C();// .ctor() - - public final <@one.Anno() T> void foo(T);// <@one.Anno() T> foo(T) -} diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/PropertyTypeParameterAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/PropertyTypeParameterAnnotation.java index a5aae06466b..f7c12c03a6e 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/PropertyTypeParameterAnnotation.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/PropertyTypeParameterAnnotation.java @@ -1,5 +1,5 @@ public final class C /* one.C*/ { public C();// .ctor() - public final int getFoo(@org.jetbrains.annotations.NotNull() T);// getFoo(T) + public final <@one.Anno() T> int getFoo(@org.jetbrains.annotations.NotNull() T);// <@one.Anno() T> getFoo(T) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.lib.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.descriptors.java similarity index 56% rename from compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.lib.java rename to compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.descriptors.java index 594681b335b..1776d8e9261 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.lib.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.descriptors.java @@ -1,3 +1,3 @@ public final class FunctionTypeParameterAnnotationKt /* one.FunctionTypeParameterAnnotationKt*/ { - public static final <@one.Anno() T> void foo(T);// <@one.Anno() T> foo(T) + public static final void foo(T);// foo(T) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.java index 1776d8e9261..594681b335b 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/FunctionTypeParameterAnnotation.java @@ -1,3 +1,3 @@ public final class FunctionTypeParameterAnnotationKt /* one.FunctionTypeParameterAnnotationKt*/ { - public static final void foo(T);// foo(T) + public static final <@one.Anno() T> void foo(T);// <@one.Anno() T> foo(T) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/PropertyTypeParameterAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/PropertyTypeParameterAnnotation.java index cb288e749eb..faa7c35e759 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/PropertyTypeParameterAnnotation.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/facades/PropertyTypeParameterAnnotation.java @@ -1,3 +1,3 @@ public final class PropertyTypeParameterAnnotationKt /* one.PropertyTypeParameterAnnotationKt*/ { - public static final int getFoo(@org.jetbrains.annotations.NotNull() T);// getFoo(T) + public static final <@one.Anno() T> int getFoo(@org.jetbrains.annotations.NotNull() T);// <@one.Anno() T> getFoo(T) }