Diagnostics for type alias expansion errors in type alias RHS

This commit is contained in:
Dmitry Petrov
2016-06-08 15:55:22 +03:00
parent 753be08de6
commit b2e5cfebee
12 changed files with 132 additions and 29 deletions
@@ -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>>
@@ -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
}
+2 -2
View File
@@ -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()