[FIR] KT-52157: Fix missing type parameter annotations
diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/FirLoadCompiledKotlinGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/FirLoadCompiledKotlinGenerated.java
index f0f65e6..ecef512 100644
--- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/FirLoadCompiledKotlinGenerated.java
+++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/FirLoadCompiledKotlinGenerated.java
@@ -56,6 +56,11 @@
runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationInArray.kt");
}
+ @TestMetadata("AnnotationOnTypeParameter.kt")
+ public void testAnnotationOnTypeParameter() throws Exception {
+ runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt");
+ }
+
@TestMetadata("ClassLiteralArguments.kt")
public void testClassLiteralArguments() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/ClassLiteralArguments.kt");
diff --git a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/AnnotationOnTypeParameter.txt b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/AnnotationOnTypeParameter.txt
new file mode 100644
index 0000000..565970c
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/AnnotationOnTypeParameter.txt
@@ -0,0 +1,9 @@
+public final class Convert<@R|test/Schema|() T, C> : R|kotlin/Any| {
+ public constructor<@R|test/Schema|() T, C>(): R|test/Convert<T, C>|
+
+}
+
+@R|kotlin/annotation/Target|(allowedTargets = <implicitArrayOf>(R|kotlin/annotation/AnnotationTarget.TYPE_PARAMETER|())) public final annotation class Schema : R|kotlin/Annotation| {
+ public constructor(): R|test/Schema|
+
+}
diff --git a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotation.txt b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotation.txt
index 3c5986e..c3723f7 100644
--- a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotation.txt
+++ b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotation.txt
@@ -4,7 +4,7 @@
}
public final class SimpleTypeParameterAnnotation : R|kotlin/Any| {
- public final fun <T> foo(x: R|T|): R|kotlin/Unit|
+ public final fun <@R|test/A|() T> foo(x: R|T|): R|kotlin/Unit|
public constructor(): R|test/SimpleTypeParameterAnnotation|
diff --git a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotationWithArguments.txt b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotationWithArguments.txt
index 24ebeee..f6a7fb6 100644
--- a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotationWithArguments.txt
+++ b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/types/TypeParameterAnnotationWithArguments.txt
@@ -10,7 +10,7 @@
}
public final class SimpleTypeParameterAnnotation : R|kotlin/Any| {
- public final fun <T> foo(x: R|T|): R|kotlin/Unit|
+ public final fun <@R|test/A|(x = String(a), y = Double(1.0)) T> foo(x: R|T|): R|kotlin/Unit|
public constructor(): R|test/SimpleTypeParameterAnnotation|
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedAnnotationDeserializer.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedAnnotationDeserializer.kt
index 70cda45..f5a6488 100644
--- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedAnnotationDeserializer.kt
+++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/KlibBasedAnnotationDeserializer.kt
@@ -24,4 +24,9 @@
val annotations = typeProto.getExtension(KlibMetadataProtoBuf.typeAnnotation).orEmpty()
return annotations.map { deserializeAnnotation(it, nameResolver) }
}
+
+ override fun loadTypeParameterAnnotations(typeParameterProto: ProtoBuf.TypeParameter, nameResolver: NameResolver): List<FirAnnotation> {
+ val annotations = typeParameterProto.getExtension(KlibMetadataProtoBuf.typeParameterAnnotation).orEmpty()
+ return annotations.map { deserializeAnnotation(it, nameResolver) }
+ }
}
\ No newline at end of file
diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt
index 6122485..6cbd4d5 100644
--- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt
+++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt
@@ -172,6 +172,9 @@
abstract fun loadTypeAnnotations(typeProto: ProtoBuf.Type, nameResolver: NameResolver): List<FirAnnotation>
+ open fun loadTypeParameterAnnotations(typeParameterProto: ProtoBuf.TypeParameter, nameResolver: NameResolver) =
+ emptyList<FirAnnotation>()
+
fun deserializeAnnotation(
proto: ProtoBuf.Annotation,
nameResolver: NameResolver,
diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt
index f6db3bf..474ef2e 100644
--- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt
+++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt
@@ -76,6 +76,7 @@
this.containingDeclarationSymbol = containingSymbol ?: error("Top-level type parameter ???")
variance = proto.variance.convertVariance()
isReified = proto.reified
+ annotations += annotationDeserializer.loadTypeParameterAnnotations(proto, nameResolver)
}
result[proto.id] = symbol
}
diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt
index 7014ff1..835b67b 100644
--- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt
+++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt
@@ -52,6 +52,11 @@
return annotations.map { deserializeAnnotation(it, nameResolver) }
}
+ override fun loadTypeParameterAnnotations(typeParameterProto: ProtoBuf.TypeParameter, nameResolver: NameResolver): List<FirAnnotation> {
+ val annotations = typeParameterProto.getExtension(JvmProtoBuf.typeParameterAnnotation).orEmpty()
+ return annotations.map { deserializeAnnotation(it, nameResolver) }
+ }
+
override fun loadConstructorAnnotations(
containerSource: DeserializedContainerSource?,
constructorProto: ProtoBuf.Constructor,
diff --git a/compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt b/compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt
new file mode 100644
index 0000000..0c6de8e
--- /dev/null
+++ b/compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt
@@ -0,0 +1,8 @@
+package test
+
+// See: KT-52157
+
+@Target(AnnotationTarget.TYPE_PARAMETER)
+public annotation class Schema
+
+class Convert<@Schema T, C>()
diff --git a/compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.txt b/compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.txt
new file mode 100644
index 0000000..de0296e
--- /dev/null
+++ b/compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.txt
@@ -0,0 +1,9 @@
+package test
+
+public final class Convert</*0*/ @test.Schema T, /*1*/ C> {
+ /*primary*/ public constructor Convert</*0*/ @test.Schema T, /*1*/ C>()
+}
+
+@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE_PARAMETER}) public final annotation class Schema : kotlin.Annotation {
+ /*primary*/ public constructor Schema()
+}
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java
index b462582..11258bd 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadJavaTestGenerated.java
@@ -1739,6 +1739,11 @@
runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationInArray.kt");
}
+ @TestMetadata("AnnotationOnTypeParameter.kt")
+ public void testAnnotationOnTypeParameter() throws Exception {
+ runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt");
+ }
+
@TestMetadata("ClassLiteralArguments.kt")
public void testClassLiteralArguments() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/ClassLiteralArguments.kt");
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java
index cb3dd0b..87ef34a 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/LoadKotlinWithTypeTableTestGenerated.java
@@ -56,6 +56,11 @@
runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationInArray.kt");
}
+ @TestMetadata("AnnotationOnTypeParameter.kt")
+ public void testAnnotationOnTypeParameter() throws Exception {
+ runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt");
+ }
+
@TestMetadata("ClassLiteralArguments.kt")
public void testClassLiteralArguments() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/ClassLiteralArguments.kt");
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/ir/IrLoadJavaTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/ir/IrLoadJavaTestGenerated.java
index a047722..e539c68 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/ir/IrLoadJavaTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/ir/IrLoadJavaTestGenerated.java
@@ -1740,6 +1740,11 @@
runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationInArray.kt");
}
+ @TestMetadata("AnnotationOnTypeParameter.kt")
+ public void testAnnotationOnTypeParameter() throws Exception {
+ runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt");
+ }
+
@TestMetadata("ClassLiteralArguments.kt")
public void testClassLiteralArguments() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/ClassLiteralArguments.kt");
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java
index 2300d88..2c8daa4 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/jvm/compiler/javac/LoadJavaUsingJavacTestGenerated.java
@@ -1739,6 +1739,11 @@
runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationInArray.kt");
}
+ @TestMetadata("AnnotationOnTypeParameter.kt")
+ public void testAnnotationOnTypeParameter() throws Exception {
+ runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt");
+ }
+
@TestMetadata("ClassLiteralArguments.kt")
public void testClassLiteralArguments() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/ClassLiteralArguments.kt");
diff --git a/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java b/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java
index 49f41d5..5b9f034 100644
--- a/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java
+++ b/core/descriptors.runtime/tests/org/jetbrains/kotlin/jvm/runtime/JvmRuntimeDescriptorLoaderTestGenerated.java
@@ -58,6 +58,11 @@
runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationInArray.kt");
}
+ @TestMetadata("AnnotationOnTypeParameter.kt")
+ public void testAnnotationOnTypeParameter() throws Exception {
+ runTest("compiler/testData/loadJava/compiledKotlin/annotations/AnnotationOnTypeParameter.kt");
+ }
+
@TestMetadata("ClassLiteralArguments.kt")
public void testClassLiteralArguments() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/ClassLiteralArguments.kt");