Support instantiation of annotations with type parameters

By ignoring type parameters. Since type parameters in annotations are a
very limited feature, their sole use is to be able to specify them as
KClass argument: annotation class Foo<T: Any>(val bar: KClass<T>).
Since we can encounter type param only as a KClass type argument (and
never as a property type), simple approach of ignoring them works fine.
In that case, since we simply copy property types to synthetic
implementation class, its properties in IR start look like this:
annotation class FooImpl(override val bar: KClass<T of Foo>). This IR
seems to be not completely correct, since FooImpl.bar type contains T of
Foo param, which is out of its scope. However, so far I didn't
encounter any problems with this during testing and after MR discussion
this approach has been considered possible.

#KT-59558 Fixed
#KT-59036 Fixed
This commit is contained in:
Leonid Startsev
2023-07-13 12:29:36 +02:00
committed by Space Team
parent 8c795462e1
commit 648c1f4599
23 changed files with 322 additions and 7 deletions
@@ -32,9 +32,7 @@ object FirConstructorCallChecker : FirFunctionCallChecker() {
klass !is FirRegularClass || klass.classKind != ClassKind.ANNOTATION_CLASS
}
) {
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.InstantiationOfAnnotationClasses) ||
declarationClass.typeParameterSymbols.isNotEmpty()
) reporter.reportOn(
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.InstantiationOfAnnotationClasses)) reporter.reportOn(
expression.source,
FirErrors.ANNOTATION_CLASS_CONSTRUCTOR_CALL,
context
@@ -546,6 +546,18 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/annotations/instances/annotationType.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationWithTypeParametersJvm.kt")
public void testAnnotationWithTypeParametersJvm() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParametersJvm.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -594,6 +606,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -546,6 +546,18 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/annotations/instances/annotationType.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationWithTypeParametersJvm.kt")
public void testAnnotationWithTypeParametersJvm() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParametersJvm.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -594,6 +606,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -225,7 +225,7 @@ class CallExpressionResolver(
if (functionDescriptor is ConstructorDescriptor) {
val constructedClass = functionDescriptor.constructedClass
if (DescriptorUtils.isAnnotationClass(constructedClass) && !canInstantiateAnnotationClass(callExpression, context.trace)) {
val supported = context.languageVersionSettings.supportsFeature(LanguageFeature.InstantiationOfAnnotationClasses) && constructedClass.declaredTypeParameters.isEmpty()
val supported = context.languageVersionSettings.supportsFeature(LanguageFeature.InstantiationOfAnnotationClasses)
if (!supported) context.trace.report(ANNOTATION_CLASS_CONSTRUCTOR_CALL.on(callExpression))
}
if (DescriptorUtils.isEnumClass(constructedClass)) {
@@ -79,7 +79,6 @@ abstract class AnnotationImplementationTransformer(val context: BackendContext,
override fun visitConstructorCall(expression: IrConstructorCall): IrExpression {
val constructedClass = expression.type.classOrNull?.owner ?: return super.visitConstructorCall(expression)
if (!constructedClass.isAnnotationClass) return super.visitConstructorCall(expression)
if (constructedClass.typeParameters.isNotEmpty()) return super.visitConstructorCall(expression) // Not supported yet
require(expression.symbol.owner.isPrimary) { "Non-primary constructors of annotations are not supported" }
val implClass = implementations.getOrPut(constructedClass) { createAnnotationImplementation(constructedClass) }
@@ -158,6 +157,7 @@ abstract class AnnotationImplementationTransformer(val context: BackendContext,
createImplicitParameterDeclarationWithWrappedDescriptor()
superTypes = listOf(annotationClass.defaultType)
platformSetup()
// Type parameters can be copied from annotationClass, but in fact they are never used by any of the backends.
}
val ctor = subclass.addConstructor {
@@ -1,6 +1,6 @@
// IGNORE_BACKEND: JVM
// (supported: JVM_IR, JS_IR(_E6))
// (supported: JVM_IR, JS_IR(_ES6), NATIVE)
// Regular JS works too, but without proper hashCode or equals
// WITH_STDLIB
@@ -0,0 +1,38 @@
// IGNORE_BACKEND: JVM
// DONT_TARGET_EXACT_BACKEND: JS
// IGNORE_BACKEND: WASM
// WASM ticket: KT-59032
// supported: JVM_IR, JS_IR(_ES6), NATIVE
// WITH_STDLIB
// !LANGUAGE: +InstantiationOfAnnotationClasses
package test
import kotlin.reflect.KClass
import kotlin.test.assertEquals
import kotlin.test.assertTrue as assert
annotation class One<T>()
annotation class Two<K, V>(val s: String)
annotation class Nesting(val a1: One<Int> = One(), val a2: Two<String, List<String>> = Two("two"))
annotation class WithKClass<K: Any>(val k: KClass<K>)
fun box(): String {
val a = One<String>()
assert(a.toString().endsWith("test.One()"))
val t = Two<String, Int>("two")
assertEquals("two", t.s)
val n = Nesting()
assertEquals("two", n.a2.s)
val wk = WithKClass(String::class)
assert(String::class == wk.k)
// type parameters don't affect equals
assert(Two<String, Int>("two") == Two<Int, String>("two"))
assert(WithKClass(Int::class) != WithKClass(String::class))
return "OK"
}
@@ -0,0 +1,36 @@
// TARGET_BACKEND: JVM_IR
// WITH_REFLECT
// !LANGUAGE: +InstantiationOfAnnotationClasses
import kotlin.reflect.KClass
import kotlin.test.assertEquals
import kotlin.test.assertTrue as assert
annotation class WithKClass<K: Any>(val k: KClass<K>)
// Following can't be called on JS/Native, as on these platforms only `Array::class : KClass<Array<*>>` exists.
annotation class WithArray<A>(val a: KClass<Array<A>>)
annotation class Combined<T: Any>(val t: KClass<T>, val w: WithKClass<T>, val wa: WithArray<T>)
class X
fun box(): String {
val wa = WithArray(Array<String>::class)
assert(wa.a.java.isArray)
assert(wa.a.java.componentType == String::class.java)
assertEquals(WithArray(Array<String>::class), wa)
assert(WithArray(Array<Int>::class) != wa)
val typeParams = WithKClass(X::class).annotationClass.typeParameters
assertEquals(1, typeParams.size)
val c = Combined(X::class, WithKClass(X::class), WithArray(Array<X>::class))
assertEquals(X::class, c.t)
assertEquals(X::class, c.w.k)
assertEquals(X::class.java, c.wa.a.java.componentType)
return "OK"
}
@@ -0,0 +1,36 @@
// IGNORE_BACKEND: JVM
// DONT_TARGET_EXACT_BACKEND: JS
// IGNORE_DEXING
// WITH_STDLIB
// !LANGUAGE: +InstantiationOfAnnotationClasses
// MODULE: lib
// FILE: lib.kt
package a
import kotlin.reflect.KClass
annotation class Two<K, V>(val s: String)
annotation class Nesting(val a2: Two<String, List<String>> = Two("two"))
annotation class WithKClass<K: Any>(val k: KClass<K>)
// MODULE: app(lib)
// FILE: app.kt
package test
import a.*
import kotlin.test.*
fun box(): String {
val t = Two<String, Int>("two")
assertEquals("two", t.s)
val n = Nesting()
assertEquals("two", n.a2.s)
val wk = WithKClass(String::class)
assertTrue(String::class == wk.k)
return "OK"
}
@@ -15,5 +15,5 @@ fun box() {
val a = A()
val b = B(4)
val c = C()
val foo = <!ANNOTATION_CLASS_CONSTRUCTOR_CALL!>G(Int::class)<!>
val foo = G(Int::class)
}
@@ -462,6 +462,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -480,6 +486,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -546,6 +546,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/annotations/instances/annotationType.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationWithTypeParametersJvm.kt")
public void testAnnotationWithTypeParametersJvm() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParametersJvm.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -594,6 +606,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -546,6 +546,18 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/annotations/instances/annotationType.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationWithTypeParametersJvm.kt")
public void testAnnotationWithTypeParametersJvm() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParametersJvm.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -594,6 +606,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -483,6 +483,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/annotations/instances/annotationType.kt");
}
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@TestMetadata("annotationWithTypeParametersJvm.kt")
public void testAnnotationWithTypeParametersJvm() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParametersJvm.kt");
}
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationsUnsignedTypes.kt");
@@ -518,6 +528,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleInlining.kt");
}
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multiplatformInstantiation.kt");
@@ -126,6 +126,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -144,6 +150,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -126,6 +126,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -144,6 +150,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -126,6 +126,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -144,6 +150,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -143,6 +143,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -161,6 +167,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -153,6 +153,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -171,6 +177,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -139,6 +139,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -157,6 +163,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -144,6 +144,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -162,6 +168,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -126,6 +126,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -144,6 +150,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {
@@ -126,6 +126,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
runTest("compiler/testData/codegen/box/annotations/instances/annotationToString.kt");
}
@Test
@TestMetadata("annotationWithTypeParameters.kt")
public void testAnnotationWithTypeParameters() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/annotationWithTypeParameters.kt");
}
@Test
@TestMetadata("annotationsUnsignedTypes.kt")
public void testAnnotationsUnsignedTypes() throws Exception {
@@ -144,6 +150,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
runTest("compiler/testData/codegen/box/annotations/instances/multifileEqHc.kt");
}
@Test
@TestMetadata("multimoduleTypeParams.kt")
public void testMultimoduleTypeParams() throws Exception {
runTest("compiler/testData/codegen/box/annotations/instances/multimoduleTypeParams.kt");
}
@Test
@TestMetadata("multiplatformInstantiation.kt")
public void testMultiplatformInstantiation() throws Exception {