From dec41e8c4689f8b0f6453f43d75c24fba49cb18b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 20 Nov 2023 23:56:21 +0100 Subject: [PATCH] Improve muted K2 metadata (kotlinp) tests Add comments referencing issues where K2 behavior is questionable, and provide `.fir.txt` versions where behavior is different but fine. --- .../kotlinp/test/K1KotlinpTestGenerated.java | 5 + .../kotlinp/test/K2KotlinpTestGenerated.java | 5 + .../kotlin/kotlinp/test/KotlinpTestUtils.kt | 5 +- .../kotlinp/testData/Annotations.fir.txt | 186 ++++++++++++++++++ .../tools/kotlinp/testData/Annotations.kt | 1 + .../kotlinp/testData/OptionalAnnotation.kt | 2 + .../kotlinp/testData/SimplePackage.fir.txt | 22 +++ .../tools/kotlinp/testData/SimplePackage.kt | 6 - .../tools/kotlinp/testData/SimplePackage.txt | 4 - .../tools/kotlinp/testData/TypeAlias.fir.txt | 17 ++ libraries/tools/kotlinp/testData/TypeAlias.kt | 3 + .../tools/kotlinp/testData/TypeAlias.txt | 17 ++ .../localClasses/DeepInnerLocalChain.kt | 1 + .../LocalClassInConstructor.fir.txt | 36 ++++ .../localClasses/LocalClassInConstructor.kt | 2 - 15 files changed, 299 insertions(+), 13 deletions(-) create mode 100644 libraries/tools/kotlinp/testData/Annotations.fir.txt create mode 100644 libraries/tools/kotlinp/testData/SimplePackage.fir.txt create mode 100644 libraries/tools/kotlinp/testData/TypeAlias.fir.txt create mode 100644 libraries/tools/kotlinp/testData/TypeAlias.kt create mode 100644 libraries/tools/kotlinp/testData/TypeAlias.txt create mode 100644 libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.fir.txt diff --git a/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K1KotlinpTestGenerated.java b/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K1KotlinpTestGenerated.java index d670c97c4f7..17a73c32b2b 100644 --- a/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K1KotlinpTestGenerated.java +++ b/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K1KotlinpTestGenerated.java @@ -124,6 +124,11 @@ public class K1KotlinpTestGenerated extends AbstractK1KotlinpTest { runTest("libraries/tools/kotlinp/testData/SyntheticClass.kt"); } + @TestMetadata("TypeAlias.kt") + public void testTypeAlias() throws Exception { + runTest("libraries/tools/kotlinp/testData/TypeAlias.kt"); + } + @TestMetadata("TypeParameters.kt") public void testTypeParameters() throws Exception { runTest("libraries/tools/kotlinp/testData/TypeParameters.kt"); diff --git a/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K2KotlinpTestGenerated.java b/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K2KotlinpTestGenerated.java index 8e1fa13ab88..b78691179b6 100644 --- a/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K2KotlinpTestGenerated.java +++ b/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/K2KotlinpTestGenerated.java @@ -129,6 +129,11 @@ public class K2KotlinpTestGenerated extends AbstractK2KotlinpTest { runTest("libraries/tools/kotlinp/testData/SyntheticClass.kt"); } + @TestMetadata("TypeAlias.kt") + public void testTypeAlias() throws Exception { + runTest("libraries/tools/kotlinp/testData/TypeAlias.kt"); + } + @TestMetadata("TypeParameters.kt") public void testTypeParameters() throws Exception { runTest("libraries/tools/kotlinp/testData/TypeParameters.kt"); diff --git a/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/KotlinpTestUtils.kt b/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/KotlinpTestUtils.kt index 025dcc780f5..eba0086482a 100644 --- a/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/KotlinpTestUtils.kt +++ b/libraries/tools/kotlinp/test/org/jetbrains/kotlin/kotlinp/test/KotlinpTestUtils.kt @@ -95,7 +95,10 @@ private fun compileAndPrintAllFiles( } if (compareWithTxt) { - KotlinTestUtils.assertEqualsToFile(File(file.path.replace(".kt.?".toRegex(), ".txt")), main.toString()) + val defaultTxtFile = File(file.path.replace(".kts?".toRegex(), ".txt")) + val firTxtFile = File(file.path.replace(".kts?".toRegex(), ".fir.txt")) + val txtFile = if (useK2 && firTxtFile.exists()) firTxtFile else defaultTxtFile + KotlinTestUtils.assertEqualsToFile(txtFile, main.toString()) } if (readWriteAndCompare && InTextDirectivesUtils.findStringWithPrefixes(file.readText(), "// NO_READ_WRITE_COMPARE") == null) { diff --git a/libraries/tools/kotlinp/testData/Annotations.fir.txt b/libraries/tools/kotlinp/testData/Annotations.fir.txt new file mode 100644 index 00000000000..6b50f977a05 --- /dev/null +++ b/libraries/tools/kotlinp/testData/Annotations.fir.txt @@ -0,0 +1,186 @@ +// A.class +// ------------------------------------------ +public final annotation class A : kotlin/Annotation { + + // signature: (ZCBSIFJDLkotlin/UInt;Lkotlin/UByte;Lkotlin/UShort;Lkotlin/ULong;Lkotlin/UInt;Lkotlin/UByte;Lkotlin/UShort;Lkotlin/ULong;[Z[C[B[S[I[F[J[DLjava/lang/String;Lkotlin/annotation/AnnotationTarget;Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;LB;Lkotlin/Array;Lkotlin/Array;Lkotlin/Array;Lkotlin/Array;)V + public constructor(z: kotlin/Boolean, c: kotlin/Char, b: kotlin/Byte, s: kotlin/Short, i: kotlin/Int, f: kotlin/Float, j: kotlin/Long, d: kotlin/Double, ui: kotlin/UInt, ub: kotlin/UByte, us: kotlin/UShort, ul: kotlin/ULong, ui_max: kotlin/UInt, ub_max: kotlin/UByte, us_max: kotlin/UShort, ul_max: kotlin/ULong, za: kotlin/BooleanArray, ca: kotlin/CharArray, ba: kotlin/ByteArray, sa: kotlin/ShortArray, ia: kotlin/IntArray, fa: kotlin/FloatArray, ja: kotlin/LongArray, da: kotlin/DoubleArray, str: kotlin/String, enum: kotlin/annotation/AnnotationTarget, klass: kotlin/reflect/KClass<*>, klass2: kotlin/reflect/KClass<*>, anno: B, stra: kotlin/Array, ka: kotlin/Array>, ea: kotlin/Array, aa: kotlin/Array) + + // getter: aa()[LB; + public final val aa: kotlin/Array + public final get + + // getter: anno()LB; + public final val anno: B + public final get + + // getter: b()B + public final val b: kotlin/Byte + public final get + + // getter: ba()[B + public final val ba: kotlin/ByteArray + public final get + + // getter: c()C + public final val c: kotlin/Char + public final get + + // getter: ca()[C + public final val ca: kotlin/CharArray + public final get + + // getter: d()D + public final val d: kotlin/Double + public final get + + // getter: da()[D + public final val da: kotlin/DoubleArray + public final get + + // getter: ea()[Lkotlin/annotation/AnnotationTarget; + public final val ea: kotlin/Array + public final get + + // getter: enum()Lkotlin/annotation/AnnotationTarget; + public final val enum: kotlin/annotation/AnnotationTarget + public final get + + // getter: f()F + public final val f: kotlin/Float + public final get + + // getter: fa()[F + public final val fa: kotlin/FloatArray + public final get + + // getter: i()I + public final val i: kotlin/Int + public final get + + // getter: ia()[I + public final val ia: kotlin/IntArray + public final get + + // getter: j()J + public final val j: kotlin/Long + public final get + + // getter: ja()[J + public final val ja: kotlin/LongArray + public final get + + // getter: ka()[Ljava/lang/Class; + public final val ka: kotlin/Array> + public final get + + // getter: klass()Ljava/lang/Class; + public final val klass: kotlin/reflect/KClass<*> + public final get + + // getter: klass2()Ljava/lang/Class; + public final val klass2: kotlin/reflect/KClass<*> + public final get + + // getter: s()S + public final val s: kotlin/Short + public final get + + // getter: sa()[S + public final val sa: kotlin/ShortArray + public final get + + // getter: str()Ljava/lang/String; + public final val str: kotlin/String + public final get + + // getter: stra()[Ljava/lang/String; + public final val stra: kotlin/Array + public final get + + // getter: ub()B + public final val ub: kotlin/UByte + public final get + + // getter: ub_max()B + public final val ub_max: kotlin/UByte + public final get + + // getter: ui()I + public final val ui: kotlin/UInt + public final get + + // getter: ui_max()I + public final val ui_max: kotlin/UInt + public final get + + // getter: ul()J + public final val ul: kotlin/ULong + public final get + + // getter: ul_max()J + public final val ul_max: kotlin/ULong + public final get + + // getter: us()S + public final val us: kotlin/UShort + public final get + + // getter: us_max()S + public final val us_max: kotlin/UShort + public final get + + // getter: z()Z + public final val z: kotlin/Boolean + public final get + + // getter: za()[Z + public final val za: kotlin/BooleanArray + public final get + + // module name: test-module +} +// B.class +// ------------------------------------------ +public final annotation class B : kotlin/Annotation { + + // signature: (Ljava/lang/String;)V + public constructor(value: kotlin/String) + + // getter: value()Ljava/lang/String; + public final val value: kotlin/String + public final get + + // module name: test-module +} +// C.class +// ------------------------------------------ +public final class C : kotlin/Any { + + // signature: ()V + public constructor() + + // signature: parameterTypeAnnotation(Ljava/lang/Object;)Ljava/lang/Object; + public final fun parameterTypeAnnotation(p: @JvmNamed(value = "Q_Q") kotlin/Any): kotlin/Any + + // signature: returnTypeAnnotation()V + public final fun returnTypeAnnotation(): @A(z = true, c = 'x', b = 1.toByte(), s = 42.toShort(), i = 42424242, f = -2.72f, j = 239239239239239L, d = 3.14, ui = 1u, ub = 255.toUByte(), us = 3.toUShort(), ul = 4uL, ui_max = 4294967295u, ub_max = 255.toUByte(), us_max = 65535.toUShort(), ul_max = 18446744073709551615uL, za = [true], ca = ['\''], ba = [1.toByte()], sa = [42.toShort()], ia = [42424242], fa = [-2.72f], ja = [239239239239239L], da = [3.14], str = "aba\ncaba'\"\t\u0001\u0002ꙮ", enum = kotlin/annotation/AnnotationTarget.CLASS, klass = C::class, klass2 = kotlin/IntArray::class, anno = B(value = "aba\ncaba'\"\t\u0001\u0002ꙮ"), stra = ["lmao"], ka = [kotlin/Double::class, kotlin/Unit::class, kotlin/LongArray::class, kotlin/Array], ea = [kotlin/annotation/AnnotationTarget.TYPEALIAS, kotlin/annotation/AnnotationTarget.FIELD], aa = [B(value = "2"), B(value = "3")]) kotlin/Unit + + // module name: test-module +} +// JvmNamed.class +// ------------------------------------------ +public final annotation class JvmNamed : kotlin/Annotation { + + // signature: (Ljava/lang/String;)V + public constructor(value: kotlin/String) + + // getter: uglyJvmName()Ljava/lang/String; + public final val value: kotlin/String + public final /* non-default */ get + + // module name: test-module +} +// META-INF/test-module.kotlin_module +// ------------------------------------------ +module { +} diff --git a/libraries/tools/kotlinp/testData/Annotations.kt b/libraries/tools/kotlinp/testData/Annotations.kt index 3eba7ce7403..e4d29ce712d 100644 --- a/libraries/tools/kotlinp/testData/Annotations.kt +++ b/libraries/tools/kotlinp/testData/Annotations.kt @@ -1,4 +1,5 @@ // IGNORE K2 +// ^ KT-63631 K2: constant value of UByte.MAX_VALUE is incorrectly serialized to metadata import kotlin.reflect.KClass diff --git a/libraries/tools/kotlinp/testData/OptionalAnnotation.kt b/libraries/tools/kotlinp/testData/OptionalAnnotation.kt index ff57868a6b6..367e5db1cce 100644 --- a/libraries/tools/kotlinp/testData/OptionalAnnotation.kt +++ b/libraries/tools/kotlinp/testData/OptionalAnnotation.kt @@ -1,4 +1,6 @@ // IGNORE K2 +// ^ KT-62931 K2: extra class files for @OptionalExpectation marked annotations + // !LANGUAGE: +MultiPlatformProjects // !OPT_IN: kotlin.ExperimentalMultiplatform // NO_READ_WRITE_COMPARE diff --git a/libraries/tools/kotlinp/testData/SimplePackage.fir.txt b/libraries/tools/kotlinp/testData/SimplePackage.fir.txt new file mode 100644 index 00000000000..0cab2975d25 --- /dev/null +++ b/libraries/tools/kotlinp/testData/SimplePackage.fir.txt @@ -0,0 +1,22 @@ +// SimplePackageKt.class +// ------------------------------------------ +package { + + // signature: topLevelFun(Ljava/lang/Object;)Lkotlin/reflect/KClass; + internal final inline fun topLevelFun(x: T#0): kotlin/reflect/KClass + + // field: topLevelProp:Ljava/lang/String; + // getter: getTopLevelProp()Ljava/lang/String; + public final var topLevelProp: kotlin/String? + public final get + private final /* non-default */ set(value: kotlin/String?) + + // module name: test-module +} +// META-INF/test-module.kotlin_module +// ------------------------------------------ +module { + package { + SimplePackageKt + } +} diff --git a/libraries/tools/kotlinp/testData/SimplePackage.kt b/libraries/tools/kotlinp/testData/SimplePackage.kt index 9bac8dbbde5..be25ab574d7 100644 --- a/libraries/tools/kotlinp/testData/SimplePackage.kt +++ b/libraries/tools/kotlinp/testData/SimplePackage.kt @@ -1,10 +1,4 @@ -// IGNORE K2 - internal inline fun topLevelFun(x: X) = X::class var topLevelProp: String? = null private set - -typealias F = Map U?> - -typealias G = F, Set> diff --git a/libraries/tools/kotlinp/testData/SimplePackage.txt b/libraries/tools/kotlinp/testData/SimplePackage.txt index e7305181648..322b7ebe7ca 100644 --- a/libraries/tools/kotlinp/testData/SimplePackage.txt +++ b/libraries/tools/kotlinp/testData/SimplePackage.txt @@ -11,10 +11,6 @@ package { public final get private final /* non-default */ set(: kotlin/String?) - public typealias F = kotlin/collections/Map> /* = kotlin/collections/Map> */ - - public typealias G = F^, kotlin/collections/Set> /* = kotlin/collections/Map, kotlin/Function1?>> */ - // module name: test-module } // META-INF/test-module.kotlin_module diff --git a/libraries/tools/kotlinp/testData/TypeAlias.fir.txt b/libraries/tools/kotlinp/testData/TypeAlias.fir.txt new file mode 100644 index 00000000000..76737ed484e --- /dev/null +++ b/libraries/tools/kotlinp/testData/TypeAlias.fir.txt @@ -0,0 +1,17 @@ +// TypeAliasKt.class +// ------------------------------------------ +package { + + public typealias F = kotlin/collections/Map> /* = kotlin/collections/Map> */ + + public typealias G = kotlin/collections/Map, kotlin/Function1?>> /* = F^, kotlin/collections/Set> */ /* = kotlin/collections/Map, kotlin/Function1?>> */ + + // module name: test-module +} +// META-INF/test-module.kotlin_module +// ------------------------------------------ +module { + package { + TypeAliasKt + } +} diff --git a/libraries/tools/kotlinp/testData/TypeAlias.kt b/libraries/tools/kotlinp/testData/TypeAlias.kt new file mode 100644 index 00000000000..40a7a90803e --- /dev/null +++ b/libraries/tools/kotlinp/testData/TypeAlias.kt @@ -0,0 +1,3 @@ +typealias F = Map U?> + +typealias G = F, Set> diff --git a/libraries/tools/kotlinp/testData/TypeAlias.txt b/libraries/tools/kotlinp/testData/TypeAlias.txt new file mode 100644 index 00000000000..f6e6c9eeafe --- /dev/null +++ b/libraries/tools/kotlinp/testData/TypeAlias.txt @@ -0,0 +1,17 @@ +// TypeAliasKt.class +// ------------------------------------------ +package { + + public typealias F = kotlin/collections/Map> /* = kotlin/collections/Map> */ + + public typealias G = F^, kotlin/collections/Set> /* = kotlin/collections/Map, kotlin/Function1?>> */ + + // module name: test-module +} +// META-INF/test-module.kotlin_module +// ------------------------------------------ +module { + package { + TypeAliasKt + } +} diff --git a/libraries/tools/kotlinp/testData/localClasses/DeepInnerLocalChain.kt b/libraries/tools/kotlinp/testData/localClasses/DeepInnerLocalChain.kt index a4545c291e2..ea69e1f17c2 100644 --- a/libraries/tools/kotlinp/testData/localClasses/DeepInnerLocalChain.kt +++ b/libraries/tools/kotlinp/testData/localClasses/DeepInnerLocalChain.kt @@ -1,4 +1,5 @@ // IGNORE K2 +// ^ KT-63655 K2: incorrect short class name in metadata for anonymous object inside a local class fun test() { class Local { diff --git a/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.fir.txt b/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.fir.txt new file mode 100644 index 00000000000..edc99de4f4b --- /dev/null +++ b/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.fir.txt @@ -0,0 +1,36 @@ +// A.class +// ------------------------------------------ +public final class A : kotlin/Any { + + // signature: ()V + public constructor() + + // module name: test-module +} +// A$L.class +// ------------------------------------------ +local final class .A.L : kotlin/Any { + + // signature: ()V + public constructor() + + // signature: x(LA$L;)V + public final fun x(l: .A.L<.A.L.I>): kotlin/Unit + + // nested class: I + + // module name: test-module +} +// A$L$I.class +// ------------------------------------------ +local final inner class .A.L.I : kotlin/Any { + + // signature: (LA$L;)V + public constructor() + + // module name: test-module +} +// META-INF/test-module.kotlin_module +// ------------------------------------------ +module { +} diff --git a/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.kt b/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.kt index 9ef022c1c41..8ae3e83ee37 100644 --- a/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.kt +++ b/libraries/tools/kotlinp/testData/localClasses/LocalClassInConstructor.kt @@ -1,5 +1,3 @@ -// IGNORE K2 - class A { init { class L {