Diagnostics for type alias expansion errors in type alias RHS
This commit is contained in:
+16
-8
@@ -1,12 +1,20 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
|
||||
class TColl<T, C : Collection<T>>
|
||||
class TC<T, C : Collection<T>>
|
||||
|
||||
typealias TCErr = TColl<String, <!UPPER_BOUND_VIOLATED!>Any<!>>
|
||||
typealias TCErr2 = TCErr
|
||||
typealias TCAlias<T, C> = TC<T, C>
|
||||
typealias TCAliasT<T> = TC<T, Any>
|
||||
typealias TCAliasC<C> = TC<Any, C>
|
||||
typealias TCAliasT1<T> = TCAlias<T, Any>
|
||||
typealias TCAliasC1<C> = TCAlias<Any, C>
|
||||
|
||||
fun testType1(x: TCErr) {}
|
||||
val testCtor1 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCErr()<!>
|
||||
|
||||
fun testType2(x: TCErr2) {}
|
||||
val testCtor2 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCErr2()<!>
|
||||
typealias Test1 = TC<Any, <!UPPER_BOUND_VIOLATED!>Any<!>>
|
||||
typealias Test2 = TC<Any, Collection<Any>>
|
||||
typealias Test3 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCAlias<Any, Any><!>
|
||||
typealias Test4 = TCAlias<Any, Collection<Any>>
|
||||
typealias Test5 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCAliasT<Any><!>
|
||||
typealias Test6 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCAliasC<Any><!>
|
||||
typealias Test7 = TCAliasC<Collection<Any>>
|
||||
typealias Test8 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCAliasT1<Any><!>
|
||||
typealias Test9 = <!UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION!>TCAliasC1<Any><!>
|
||||
typealias Test10 = TCAliasC1<Collection<Any>>
|
||||
|
||||
+17
-8
@@ -1,14 +1,23 @@
|
||||
package
|
||||
|
||||
public typealias TCErr = TColl<kotlin.String, kotlin.Any>
|
||||
public typealias TCErr2 = TCErr
|
||||
public val testCtor1: TColl<kotlin.String, kotlin.Any>
|
||||
public val testCtor2: TColl<kotlin.String, kotlin.Any>
|
||||
public fun testType1(/*0*/ x: TCErr [= TColl<kotlin.String, kotlin.Any>]): kotlin.Unit
|
||||
public fun testType2(/*0*/ x: TCErr2 [= TColl<kotlin.String, kotlin.Any>]): kotlin.Unit
|
||||
public typealias TCAlias</*0*/ T, /*1*/ C> = TC<T, C>
|
||||
public typealias TCAliasC</*0*/ C> = TC<kotlin.Any, C>
|
||||
public typealias TCAliasC1</*0*/ C> = TCAlias<kotlin.Any, C>
|
||||
public typealias TCAliasT</*0*/ T> = TC<T, kotlin.Any>
|
||||
public typealias TCAliasT1</*0*/ T> = TCAlias<T, kotlin.Any>
|
||||
public typealias Test1 = TC<kotlin.Any, kotlin.Any>
|
||||
public typealias Test10 = TCAliasC1<kotlin.collections.Collection<kotlin.Any>>
|
||||
public typealias Test2 = TC<kotlin.Any, kotlin.collections.Collection<kotlin.Any>>
|
||||
public typealias Test3 = TCAlias<kotlin.Any, kotlin.Any>
|
||||
public typealias Test4 = TCAlias<kotlin.Any, kotlin.collections.Collection<kotlin.Any>>
|
||||
public typealias Test5 = TCAliasT<kotlin.Any>
|
||||
public typealias Test6 = TCAliasC<kotlin.Any>
|
||||
public typealias Test7 = TCAliasC<kotlin.collections.Collection<kotlin.Any>>
|
||||
public typealias Test8 = TCAliasT1<kotlin.Any>
|
||||
public typealias Test9 = TCAliasC1<kotlin.Any>
|
||||
|
||||
public final class TColl</*0*/ T, /*1*/ C : kotlin.collections.Collection<T>> {
|
||||
public constructor TColl</*0*/ T, /*1*/ C : kotlin.collections.Collection<T>>()
|
||||
public final class TC</*0*/ T, /*1*/ C : kotlin.collections.Collection<T>> {
|
||||
public constructor TC</*0*/ T, /*1*/ C : kotlin.collections.Collection<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
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
|
||||
|
||||
interface In<in T>
|
||||
interface Out<out T>
|
||||
|
||||
typealias InAlias<T> = In<T>
|
||||
typealias OutAlias<T> = Out<T>
|
||||
|
||||
typealias TestOutForIn<T> = In<<!CONFLICTING_PROJECTION!>out<!> T>
|
||||
typealias TestInForOut<T> = Out<<!CONFLICTING_PROJECTION!>in<!> T>
|
||||
|
||||
typealias TestOutForInWithinAlias<T> = <!CONFLICTING_PROJECTION_IN_TYPEALIAS_EXPANSION!>InAlias<out T><!>
|
||||
typealias TestInForOutWithinAlias<T> = <!CONFLICTING_PROJECTION_IN_TYPEALIAS_EXPANSION!>OutAlias<in T><!>
|
||||
|
||||
fun <T> testOutForInWithinResolvedType(x: <!CONFLICTING_PROJECTION_IN_TYPEALIAS_EXPANSION!>InAlias<out T><!>) {}
|
||||
fun <T> testInForOutWithinResolvedType(x: <!CONFLICTING_PROJECTION_IN_TYPEALIAS_EXPANSION!>OutAlias<in T><!>) {}
|
||||
@@ -0,0 +1,22 @@
|
||||
package
|
||||
|
||||
public typealias InAlias</*0*/ T> = In<T>
|
||||
public typealias OutAlias</*0*/ T> = Out<T>
|
||||
public typealias TestInForOut</*0*/ T> = Out<in T>
|
||||
public typealias TestInForOutWithinAlias</*0*/ T> = OutAlias<in T>
|
||||
public typealias TestOutForIn</*0*/ T> = In<out T>
|
||||
public typealias TestOutForInWithinAlias</*0*/ T> = InAlias<out T>
|
||||
public fun </*0*/ T> testInForOutWithinResolvedType(/*0*/ x: OutAlias<in T> [= Out<in T>]): kotlin.Unit
|
||||
public fun </*0*/ T> testOutForInWithinResolvedType(/*0*/ x: InAlias<out T> [= In<out T>]): kotlin.Unit
|
||||
|
||||
public interface In</*0*/ in 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 interface Out</*0*/ out 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
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
typealias A = B
|
||||
typealias B = A
|
||||
typealias A = <!RECURSIVE_TYPEALIAS_EXPANSION!>B<!>
|
||||
typealias B = <!RECURSIVE_TYPEALIAS_EXPANSION!>A<!>
|
||||
|
||||
val x: <!RECURSIVE_TYPEALIAS_EXPANSION!>A<!> = TODO()
|
||||
Reference in New Issue
Block a user