KT-14498: Properly check variance in expanded types.
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
// !DIAGNOSTICS: -UNUSED_TYPEALIAS_PARAMETER
|
||||
|
||||
interface I1<S>
|
||||
interface Out<out T>
|
||||
interface InvOut<T1, out T2>
|
||||
|
||||
typealias A1<S> = I1<S>
|
||||
typealias A2<T, S> = I1<S>
|
||||
typealias AOut<T> = Out<T>
|
||||
typealias AInvOut<T1, T2> = InvOut<T1, T2>
|
||||
typealias AInvOutTT<T> = AInvOut<T, T>
|
||||
|
||||
class Test1<out S> : <!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>A1<S><!>
|
||||
class Test2<out S> : <!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>A2<Any, S><!>
|
||||
class Test3<out S> : AOut<S>
|
||||
class Test4<out S> : <!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>AInvOut<S, S><!>
|
||||
class Test5<out S> : <!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>AInvOutTT<S><!>
|
||||
@@ -0,0 +1,59 @@
|
||||
package
|
||||
|
||||
public interface I1</*0*/ S> {
|
||||
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 InvOut</*0*/ T1, /*1*/ out T2> {
|
||||
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
|
||||
}
|
||||
|
||||
public final class Test1</*0*/ out S> : A1<S> /* = I1<S> */ {
|
||||
public constructor Test1</*0*/ out S>()
|
||||
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</*0*/ out S> : A2<kotlin.Any, S> /* = I1<S> */ {
|
||||
public constructor Test2</*0*/ out S>()
|
||||
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</*0*/ out S> : AOut<S> /* = Out<out S> */ {
|
||||
public constructor Test3</*0*/ out S>()
|
||||
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</*0*/ out S> : AInvOut<S, S> /* = InvOut<S, out S> */ {
|
||||
public constructor Test4</*0*/ out S>()
|
||||
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</*0*/ out S> : AInvOutTT<S> /* = InvOut<S, out S> */ {
|
||||
public constructor Test5</*0*/ out S>()
|
||||
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</*0*/ S> = I1<S>
|
||||
public typealias A2</*0*/ T, /*1*/ S> = I1<S>
|
||||
public typealias AInvOut</*0*/ T1, /*1*/ T2> = InvOut<T1, T2>
|
||||
public typealias AInvOutTT</*0*/ T> = AInvOut<T, T>
|
||||
public typealias AOut</*0*/ T> = Out<T>
|
||||
@@ -0,0 +1,11 @@
|
||||
interface Out<out R>
|
||||
interface Inv<E>
|
||||
typealias A1<E> = Out<Out<E>>
|
||||
typealias A2<E> = Out<Out<E>>
|
||||
typealias A3<E> = Inv<Out<E>>
|
||||
typealias A4<E> = Out<Inv<E>>
|
||||
|
||||
interface Q1<out S> : Out<A1<S>>
|
||||
interface Q2<out S> : Out<A2<S>>
|
||||
interface Q3<out S> : Out<<!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>A3<S><!>>
|
||||
interface Q4<out S> : Out<<!TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE!>A4<S><!>>
|
||||
@@ -0,0 +1,41 @@
|
||||
package
|
||||
|
||||
public interface Inv</*0*/ E> {
|
||||
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 R> {
|
||||
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 Q1</*0*/ out S> : Out<A1<S> /* = Out<Out<out S>> */> {
|
||||
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 Q2</*0*/ out S> : Out<A2<S> /* = Out<Out<out S>> */> {
|
||||
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 Q3</*0*/ out S> : Out<A3<S> /* = Inv<Out<out S>> */> {
|
||||
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 Q4</*0*/ out S> : Out<A4<S> /* = Out<Inv<S>> */> {
|
||||
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</*0*/ E> = Out<Out<E>>
|
||||
public typealias A2</*0*/ E> = Out<Out<E>>
|
||||
public typealias A3</*0*/ E> = Inv<Out<E>>
|
||||
public typealias A4</*0*/ E> = Out<Inv<E>>
|
||||
Reference in New Issue
Block a user