Fix nested typealiases expansion and as a result fix serialization

Consider the following situation:
 ```
 class Inv<T>
 typealias A<K> = Inv<K>
 typealias B<V> = Inv<A<K>>

 fun <U> materialize(): B<U> = TODO()
 ```

 Type `B<U>` is expanding to `Inv<Inv<U>>` and for this type `B<U>` and
 `Inv<A<U>>` are abbreviated types, but due to a bug we forgot to make
 substitution for `Inv<A<U>>` and were getting abbreviated type
 `Inv<A<K>>` where `K` is a type parameter from the typealias declaration.

 This bug didn't affect subtyping anyhow but the incorrect type was
 serialized and caused problems during deserialization as there wasn't
 `K` in deserialization context.

 #KT-24964 Fixed
 #KT-20780 Fixed
 #KT-20065 Fixed
 #KT-28236 Fixed
 #KT-21775 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2019-02-22 17:39:40 +03:00
parent f1d5912f05
commit 617bed1bf1
5 changed files with 115 additions and 13 deletions
@@ -213,6 +213,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl
runTest("compiler/testData/compileKotlinAgainstKotlin/kt14012_multi.kt");
}
@TestMetadata("kt21775.kt")
public void testKt21775() throws Exception {
runTest("compiler/testData/compileKotlinAgainstKotlin/kt21775.kt");
}
@TestMetadata("multifileClassInlineFunctionAccessingProperty.kt")
public void testMultifileClassInlineFunctionAccessingProperty() throws Exception {
runTest("compiler/testData/compileKotlinAgainstKotlin/multifileClassInlineFunctionAccessingProperty.kt");
@@ -233,11 +238,21 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl
runTest("compiler/testData/compileKotlinAgainstKotlin/nestedEnum.kt");
}
@TestMetadata("nestedFunctionTypeAliasExpansion.kt")
public void testNestedFunctionTypeAliasExpansion() throws Exception {
runTest("compiler/testData/compileKotlinAgainstKotlin/nestedFunctionTypeAliasExpansion.kt");
}
@TestMetadata("nestedObject.kt")
public void testNestedObject() throws Exception {
runTest("compiler/testData/compileKotlinAgainstKotlin/nestedObject.kt");
}
@TestMetadata("nestedTypeAliasExpansion.kt")
public void testNestedTypeAliasExpansion() throws Exception {
runTest("compiler/testData/compileKotlinAgainstKotlin/nestedTypeAliasExpansion.kt");
}
@TestMetadata("optionalAnnotation.kt")
public void testOptionalAnnotation() throws Exception {
runTest("compiler/testData/compileKotlinAgainstKotlin/optionalAnnotation.kt");