Prohibit constructing projected types via type aliases.

This commit is contained in:
Dmitry Petrov
2016-11-18 15:36:04 +03:00
parent bab9cde280
commit 063bce23d2
15 changed files with 243 additions and 3 deletions
@@ -10,4 +10,4 @@ fun <T> listOf(): List<T> = null!!
// since it has 'out' type projection in 'in' position.
val test1 = <!UNRESOLVED_REFERENCE!>BOutIn<!>(<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>listOf<!>(), null!!)
val test2 = BInIn(listOf(), null!!)
val test2 = <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>BInIn(listOf(), null!!)<!>
@@ -0,0 +1,12 @@
class C<T>
typealias CStar = C<*>
typealias CIn = C<in Int>
typealias COut = C<out Int>
typealias CT<T> = C<T>
val test1 = <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>CStar()<!>
val test2 = <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>CIn()<!>
val test3 = <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>COut()<!>
val test4 = CT<<!PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT!>*<!>>()
val test5 = CT<CT<*>>()
@@ -0,0 +1,18 @@
package
public val test1: C<*>
public val test2: C<in kotlin.Int>
public val test3: C<out kotlin.Int>
public val test4: C<[ERROR : Star projection in a call]>
public val test5: C<CT<*> /* = C<*> */>
public final class C</*0*/ T> {
public constructor C</*0*/ 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 CIn = C<in kotlin.Int>
public typealias COut = C<out kotlin.Int>
public typealias CStar = C<*>
public typealias CT</*0*/ T> = C<T>
@@ -0,0 +1,16 @@
open class C<T>
typealias CStar = C<*>
typealias CIn = C<in Int>
typealias COut = C<out Int>
typealias CT<T> = C<T>
class Test1 : <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>CStar()<!>
class Test2 : <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>CIn()<!>
class Test3 : <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>COut()<!>
class Test4 : CStar {
constructor() : <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>super<!>()
}
class Test5 : <!EXPANDED_TYPE_CANNOT_BE_CONSTRUCTED!>CT<<!PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE!>*<!>>()<!>
@@ -0,0 +1,47 @@
package
public open class C</*0*/ T> {
public constructor C</*0*/ 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 final class Test1 : CStar /* = C<*> */ {
public constructor Test1()
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 final class Test2 : CIn /* = C<in kotlin.Int> */ {
public constructor Test2()
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 final class Test3 : COut /* = C<out kotlin.Int> */ {
public constructor Test3()
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 final class Test4 : CStar /* = C<*> */ {
public constructor Test4()
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 final class Test5 : CT<*> /* = C<*> */ {
public constructor Test5()
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 CIn = C<in kotlin.Int>
public typealias COut = C<out kotlin.Int>
public typealias CStar = C<*>
public typealias CT</*0*/ T> = C<T>
@@ -0,0 +1,14 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
// !CHECK_TYPE
// FILE: a.kt
class B(x: String)
typealias A1 = B
private typealias A2 = B
private typealias A3 = B
fun A3(x: Any) = "OK"
fun bar() {
A3("") checkType { _<B>() }
}
@@ -0,0 +1,14 @@
package
public fun A3(/*0*/ x: kotlin.Any): kotlin.String
public fun bar(): kotlin.Unit
public final class B {
public constructor B(/*0*/ x: kotlin.String)
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 A1 = B
private typealias A2 = B
private typealias A3 = B
@@ -0,0 +1,12 @@
interface I<T>
typealias IStar = I<*>
typealias IIn = I<in Int>
typealias IOut = I<out Int>
typealias IT<T> = I<T>
class Test1 : <!EXPANDED_TYPE_CANNOT_BE_INHERITED!>IStar<!>
class Test2 : <!EXPANDED_TYPE_CANNOT_BE_INHERITED!>IIn<!>
class Test3 : <!EXPANDED_TYPE_CANNOT_BE_INHERITED!>IOut<!>
class Test4 : IT<<!PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE!>*<!>>
class Test5 : IT<IT<*>>
@@ -0,0 +1,46 @@
package
public interface I</*0*/ 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 final class Test1 : IStar /* = I<*> */ {
public constructor Test1()
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 final class Test2 : IIn /* = I<in kotlin.Int> */ {
public constructor Test2()
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 final class Test3 : IOut /* = I<out kotlin.Int> */ {
public constructor Test3()
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 final class Test4 : IT<*> /* = I<*> */ {
public constructor Test4()
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 final class Test5 : IT<IT<*> /* = I<*> */> /* = I<IT<*> /* = I<*> */> */ {
public constructor Test5()
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 IIn = I<in kotlin.Int>
public typealias IOut = I<out kotlin.Int>
public typealias IStar = I<*>
public typealias IT</*0*/ T> = I<T>