From 80d68fc9087a29010bc9de2aac642834278d6ec2 Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 8 May 2023 18:02:09 +0200 Subject: [PATCH] [FIR] Deserialize reference to typealias from metadata as fully expanded #KT-58335 Fixed --- .../resolveWithStdlib/noneWithForEach.fir.txt | 2 +- .../deserialization/FirTypeDeserializer.kt | 5 ++-- .../testData/codegen/box/typealias/kt45308.kt | 5 +--- .../compiledKotlin/typealias/Basic.fir.k1.txt | 23 ++++++++++++++++++ .../compiledKotlin/typealias/Basic.fir.k2.txt | 23 ++++++++++++++++++ .../compiledKotlin/typealias/Basic.fir.txt | 24 ------------------- .../typealias/Generic.fir.k1.txt | 17 +++++++++++++ .../typealias/Generic.fir.k2.txt | 17 +++++++++++++ .../compiledKotlin/typealias/Generic.fir.txt | 18 -------------- 9 files changed, 85 insertions(+), 49 deletions(-) create mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k1.txt create mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k2.txt delete mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.txt create mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k1.txt create mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k2.txt delete mode 100644 compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.txt diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/noneWithForEach.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/noneWithForEach.fir.txt index d8902a90d4b..c100ad8a655 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/noneWithForEach.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/noneWithForEach.fir.txt @@ -5,7 +5,7 @@ FILE: noneWithForEach.kt } public final fun foo(conflicting: R|kotlin/collections/List|): R|kotlin/Unit| { - lval filtered: R|kotlin/collections/ArrayList| = R|kotlin/collections/arrayListOf|() + lval filtered: R|java/util/ArrayList| = R|kotlin/collections/arrayListOf|() R|/conflicting|.R|kotlin/collections/groupBy|( = groupBy@fun (it: R|Diagnostic|): R|kotlin/String| { ^ R|/it|.R|/Diagnostic.name| } 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 a2b42fde77d..b4d1a2778ea 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 @@ -200,8 +200,9 @@ class FirTypeDeserializer( } else -> ConeClassLikeTypeImpl(constructor, arguments, isNullable = proto.nullable, attributes) } - val abbreviatedTypeProto = proto.abbreviatedType(typeTable) ?: return simpleType - return simpleType(abbreviatedTypeProto, attributes) + + // TODO: Return abbreviated types for type aliases, see KT-58542 + return simpleType } private fun createSuspendFunctionTypeForBasicCase( diff --git a/compiler/testData/codegen/box/typealias/kt45308.kt b/compiler/testData/codegen/box/typealias/kt45308.kt index 1503596941a..1cc1ff0ed43 100644 --- a/compiler/testData/codegen/box/typealias/kt45308.kt +++ b/compiler/testData/codegen/box/typealias/kt45308.kt @@ -1,8 +1,5 @@ // This test checks that unresolved typealias in an abbreviated type does not crash the compiler or result in a compilation error. -// Apparently, there's some demand for this behavior, see KT-45308. - -// IGNORE_BACKEND_K2: JVM_IR -// FIR status: reports RETURN_TYPE_MISMATCH: Return type mismatch: expected kotlin/String, actual a/A +// Apparently, there's some demand for this behavior, see KT-45308, KT-58335. // MODULE: a // FILE: a.kt diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k1.txt b/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k1.txt new file mode 100644 index 00000000000..337d8a933bf --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k1.txt @@ -0,0 +1,23 @@ +public final val x1: R|kotlin/String| + public get(): R|kotlin/String| + +public final val x2: R|kotlin/String| + public get(): R|kotlin/String| + +public final val x3: R|kotlin/String| + public get(): R|kotlin/String| + +public final val x4: R|kotlin/String?| + public get(): R|kotlin/String?| + +public final val x5: R|kotlin/String?| + public get(): R|kotlin/String?| + +public final val x6: R|kotlin/String?| + public get(): R|kotlin/String?| + +public final typealias S = R|kotlin/String| + +public final typealias SS = R|test/S| + +public final typealias SSS = R|test/SS| diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k2.txt b/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k2.txt new file mode 100644 index 00000000000..7ff2a803f5c --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.k2.txt @@ -0,0 +1,23 @@ +public final val x1: R|kotlin/String| + public get(): R|kotlin/String| + +public final val x2: R|kotlin/String| + public get(): R|kotlin/String| + +public final val x3: R|kotlin/String| + public get(): R|kotlin/String| + +public final val x4: R|kotlin/String?| + public get(): R|kotlin/String?| + +public final val x5: R|kotlin/String?| + public get(): R|kotlin/String?| + +public final val x6: R|kotlin/String?| + public get(): R|kotlin/String?| + +public final typealias S = R|kotlin/String| + +public final typealias SS = R|kotlin/String| + +public final typealias SSS = R|kotlin/String| diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.txt b/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.txt deleted file mode 100644 index b50fd142778..00000000000 --- a/compiler/testData/loadJava/compiledKotlin/typealias/Basic.fir.txt +++ /dev/null @@ -1,24 +0,0 @@ -public final val x1: R|test/S| - public get(): R|test/S| - -public final val x2: R|test/SS| - public get(): R|test/SS| - -public final val x3: R|test/SSS| - public get(): R|test/SSS| - -public final val x4: R|test/S?| - public get(): R|test/S?| - -public final val x5: R|test/SS?| - public get(): R|test/SS?| - -public final val x6: R|test/SSS?| - public get(): R|test/SSS?| - -public final typealias S = R|kotlin/String| - -public final typealias SS = R|test/S| - -public final typealias SSS = R|test/SS| - diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k1.txt b/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k1.txt new file mode 100644 index 00000000000..5f9fc939be7 --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k1.txt @@ -0,0 +1,17 @@ +public final fun test1(x: R|kotlin/collections/List|): R|kotlin/Unit| + +public final fun test2(x: R|kotlin/collections/List|): R|kotlin/Unit| + +public final fun test3(x: R|kotlin/collections/List|): R|kotlin/Unit| + +public final fun test4(x: R|kotlin/collections/List>|): R|kotlin/Unit| + +public final fun test5(x: R|kotlin/collections/List>|): R|kotlin/Unit| + +public final fun test6(x: R|kotlin/collections/List>|): R|kotlin/Unit| + +public final typealias L = R|kotlin/collections/List| + +public final typealias LL = R|test/L| + +public final typealias LLL = R|test/LL| diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k2.txt b/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k2.txt new file mode 100644 index 00000000000..0bfc9447318 --- /dev/null +++ b/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.k2.txt @@ -0,0 +1,17 @@ +public final fun test1(x: R|kotlin/collections/List|): R|kotlin/Unit| + +public final fun test2(x: R|kotlin/collections/List|): R|kotlin/Unit| + +public final fun test3(x: R|kotlin/collections/List|): R|kotlin/Unit| + +public final fun test4(x: R|kotlin/collections/List>|): R|kotlin/Unit| + +public final fun test5(x: R|kotlin/collections/List>|): R|kotlin/Unit| + +public final fun test6(x: R|kotlin/collections/List>|): R|kotlin/Unit| + +public final typealias L = R|kotlin/collections/List| + +public final typealias LL = R|kotlin/collections/List| + +public final typealias LLL = R|kotlin/collections/List| diff --git a/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.txt b/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.txt deleted file mode 100644 index d74979048f4..00000000000 --- a/compiler/testData/loadJava/compiledKotlin/typealias/Generic.fir.txt +++ /dev/null @@ -1,18 +0,0 @@ -public final fun test1(x: R|test/L|): R|kotlin/Unit| - -public final fun test2(x: R|test/LL|): R|kotlin/Unit| - -public final fun test3(x: R|test/LLL|): R|kotlin/Unit| - -public final fun test4(x: R|test/L>|): R|kotlin/Unit| - -public final fun test5(x: R|test/LL>|): R|kotlin/Unit| - -public final fun test6(x: R|test/LLL>|): R|kotlin/Unit| - -public final typealias L = R|kotlin/collections/List| - -public final typealias LL = R|test/L| - -public final typealias LLL = R|test/LL| -