Retain nullability information for type alias arguments which are in turn type aliases #KT-13835 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-09-15 18:13:30 +03:00
parent 090d157f86
commit c1296e2134
6 changed files with 56 additions and 1 deletions
@@ -153,7 +153,11 @@ class TypeAliasExpander(
}
else -> {
val substitutedArguments = type.arguments.mapIndexed { i, originalArgument ->
expandTypeProjection(originalArgument, typeAliasExpansion, typeConstructor.parameters[i], recursionDepth + 1)
val projection = expandTypeProjection(
originalArgument, typeAliasExpansion, typeConstructor.parameters[i], recursionDepth + 1)
if (projection.isStarProjection) projection
else TypeProjectionImpl(projection.projectionKind,
TypeUtils.makeNullableIfNeeded(projection.type, originalArgument.type.isMarkedNullable))
}
val substitutedType = type.replace(newArguments = substitutedArguments)
@@ -0,0 +1,12 @@
typealias MyString = String
class Container<T>(val x: T)
typealias MyStringContainer = Container<MyString?>
val ms: MyString = "MyString"
val msn: MyString? = null
val msc: MyStringContainer = Container(ms)
val msc1 = MyStringContainer(null)
@@ -0,0 +1,16 @@
package
public val ms: MyString /* = kotlin.String */ = "MyString"
public val msc: MyStringContainer /* = Container<MyString? /* = kotlin.String? */> */
public val msc1: Container<MyString? /* = kotlin.String? */>
public val msn: MyString? /* = kotlin.String? */ = null
public final class Container</*0*/ T> {
public constructor Container</*0*/ T>(/*0*/ x: T)
public final val x: T
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public typealias MyString = kotlin.String
public typealias MyStringContainer = Container<MyString?>
@@ -0,0 +1,6 @@
typealias Processor = (number: Int) -> Unit
typealias Handler = (String) -> Processor?
fun x(handler: Handler) {
return handler("a")!!(1)
}
@@ -0,0 +1,5 @@
package
public fun x(/*0*/ handler: Handler /* = (kotlin.String) -> Processor? /* = ((kotlin.Int) -> kotlin.Unit)? */ */): kotlin.Unit
public typealias Handler = (kotlin.String) -> Processor?
public typealias Processor = (kotlin.Int) -> kotlin.Unit
@@ -20229,6 +20229,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("inGenerics.kt")
public void testInGenerics() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/inGenerics.kt");
doTest(fileName);
}
@TestMetadata("inSupertypesList.kt")
public void testInSupertypesList() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/inSupertypesList.kt");
@@ -20391,6 +20397,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("typeAliasNotNull.kt")
public void testTypeAliasNotNull() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/typeAliasNotNull.kt");
doTest(fileName);
}
@TestMetadata("typeAliasObject.kt")
public void testTypeAliasObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/typealias/typeAliasObject.kt");