Support only simple declarations for 'impl' type aliases

E.g. 'impl typealias Foo<A, B> = Bar<A, B>' is allowed; everything else
(variance, changing order of parameters, etc.) is pretty much disallowed.

This is done for simplicity: otherwise matching the platform/impl class scopes
would be not so straightforward
This commit is contained in:
Alexander Udalov
2016-11-22 15:03:36 +03:00
parent 751949db69
commit a8bd82e863
6 changed files with 163 additions and 0 deletions
@@ -0,0 +1,30 @@
// !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common
// FILE: common.kt
platform class C1
platform class C2<A>
platform class C3<B>
platform class C4<D, E>
platform class C5<F, G>
platform class C6<H>
platform class C7<I>
platform class C8<J>
platform class C9<K>
platform class C10<L>
// MODULE: m2-jvm(m1-common)
// FILE: jvm.kt
impl typealias C1 = String
<!IMPL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>impl typealias C2<<!UNUSED_TYPEALIAS_PARAMETER!>A<!>> = List<String><!>
<!IMPL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>impl typealias C3<B> = List<B><!>
impl typealias C4<D, E> = MutableMap<D, E>
<!IMPL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>impl typealias C5<F, G> = MutableMap<G, F><!>
impl typealias C6<H> = MutableList<H>
<!IMPL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>impl typealias C7<I> = MutableList<out I><!>
<!IMPL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>impl typealias C8<<!UNUSED_TYPEALIAS_PARAMETER!>J<!>> = MutableList<*><!>
<!IMPL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>impl typealias C9<K> = MutableList<in K><!>
typealias Tmp<K> = MutableList<K>
<!IMPL_TYPE_ALIAS_NOT_TO_CLASS!>impl typealias C10<L> = Tmp<L><!>
@@ -0,0 +1,88 @@
// -- Module: <m1-common> --
package
public final platform class C1 {
public constructor C1()
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 platform class C10</*0*/ L> {
public constructor C10</*0*/ L>()
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 platform class C2</*0*/ A> {
public constructor C2</*0*/ A>()
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 platform class C3</*0*/ B> {
public constructor C3</*0*/ B>()
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 platform class C4</*0*/ D, /*1*/ E> {
public constructor C4</*0*/ D, /*1*/ 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 final platform class C5</*0*/ F, /*1*/ G> {
public constructor C5</*0*/ F, /*1*/ G>()
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 platform class C6</*0*/ H> {
public constructor C6</*0*/ H>()
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 platform class C7</*0*/ I> {
public constructor C7</*0*/ I>()
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 platform class C8</*0*/ J> {
public constructor C8</*0*/ J>()
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 platform class C9</*0*/ K> {
public constructor C9</*0*/ K>()
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
}
// -- Module: <m2-jvm> --
package
public typealias C1 = kotlin.String
public typealias C10</*0*/ L> = Tmp<L>
public typealias C2</*0*/ A> = kotlin.collections.List<kotlin.String>
public typealias C3</*0*/ B> = kotlin.collections.List<B>
public typealias C4</*0*/ D, /*1*/ E> = kotlin.collections.MutableMap<D, E>
public typealias C5</*0*/ F, /*1*/ G> = kotlin.collections.MutableMap<G, F>
public typealias C6</*0*/ H> = kotlin.collections.MutableList<H>
public typealias C7</*0*/ I> = kotlin.collections.MutableList<out I>
public typealias C8</*0*/ J> = kotlin.collections.MutableList<*>
public typealias C9</*0*/ K> = kotlin.collections.MutableList<in K>
public typealias Tmp</*0*/ K> = kotlin.collections.MutableList<K>