[FIR] Deserialize reference to typealias from metadata as fully expanded

#KT-58335 Fixed
This commit is contained in:
Kirill Rakhman
2023-05-08 18:02:09 +02:00
committed by Space Team
parent 17ad4ceec9
commit 80d68fc908
9 changed files with 85 additions and 49 deletions
@@ -5,7 +5,7 @@ FILE: noneWithForEach.kt
}
public final fun foo(conflicting: R|kotlin/collections/List<Diagnostic>|): R|kotlin/Unit| {
lval filtered: R|kotlin/collections/ArrayList<Diagnostic>| = R|kotlin/collections/arrayListOf|<R|Diagnostic|>()
lval filtered: R|java/util/ArrayList<Diagnostic>| = R|kotlin/collections/arrayListOf|<R|Diagnostic|>()
R|<local>/conflicting|.R|kotlin/collections/groupBy|<R|Diagnostic|, R|kotlin/String|>(<L> = groupBy@fun <anonymous>(it: R|Diagnostic|): R|kotlin/String| <inline=Inline, kind=UNKNOWN> {
^ R|<local>/it|.R|/Diagnostic.name|
}
@@ -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(
+1 -4
View File
@@ -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
@@ -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|
@@ -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|
@@ -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|
@@ -0,0 +1,17 @@
public final fun test1(x: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
public final fun test2(x: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
public final fun test3(x: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
public final fun test4(x: R|kotlin/collections/List<kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit|
public final fun test5(x: R|kotlin/collections/List<kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit|
public final fun test6(x: R|kotlin/collections/List<kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit|
public final typealias L<T> = R|kotlin/collections/List<T>|
public final typealias LL<T> = R|test/L<T>|
public final typealias LLL<T> = R|test/LL<T>|
@@ -0,0 +1,17 @@
public final fun test1(x: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
public final fun test2(x: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
public final fun test3(x: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
public final fun test4(x: R|kotlin/collections/List<kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit|
public final fun test5(x: R|kotlin/collections/List<kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit|
public final fun test6(x: R|kotlin/collections/List<kotlin/collections/List<kotlin/String>>|): R|kotlin/Unit|
public final typealias L<T> = R|kotlin/collections/List<T>|
public final typealias LL<T> = R|kotlin/collections/List<T>|
public final typealias LLL<T> = R|kotlin/collections/List<T>|
@@ -1,18 +0,0 @@
public final fun test1(x: R|test/L<kotlin/String>|): R|kotlin/Unit|
public final fun test2(x: R|test/LL<kotlin/String>|): R|kotlin/Unit|
public final fun test3(x: R|test/LLL<kotlin/String>|): R|kotlin/Unit|
public final fun test4(x: R|test/L<test/L<kotlin/String>>|): R|kotlin/Unit|
public final fun test5(x: R|test/LL<test/LL<kotlin/String>>|): R|kotlin/Unit|
public final fun test6(x: R|test/LLL<test/LLL<kotlin/String>>|): R|kotlin/Unit|
public final typealias L<T> = R|kotlin/collections/List<T>|
public final typealias LL<T> = R|test/L<T>|
public final typealias LLL<T> = R|test/LL<T>|