Support 'expect final' -> 'actual open' for callables

#KT-17944
This commit is contained in:
Alexander Udalov
2017-10-12 12:05:59 +02:00
parent ee9a6ca53e
commit 2682837fd7
6 changed files with 88 additions and 5 deletions
@@ -0,0 +1,27 @@
// !LANGUAGE: +MultiPlatformProjects
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
fun f()
val v: String
}
expect class Bar {
fun g()
}
// MODULE: m2-jvm(m1-common)
// FILE: jvm.kt
actual open class Foo(actual open val v: String) {
actual open fun f() {}
}
actual typealias Bar = JavaBar
// FILE: JavaBar.java
public class JavaBar {
public void g() {}
}
@@ -0,0 +1,39 @@
// -- Module: <m1-common> --
package
public final expect class Bar {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final expect fun g(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final expect class Foo {
public expect final val v: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final expect fun f(): kotlin.Unit
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 open actual class Foo {
public constructor Foo(/*0*/ v: kotlin.String)
public actual open val v: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open actual fun f(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class JavaBar {
public constructor JavaBar()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun g(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public typealias Bar = JavaBar
@@ -23,13 +23,13 @@ open class Open {
}
actual open class Foo1 : Open() {
override val <!ACTUAL_WITHOUT_EXPECT!>x<!> = super.x
override val <!ACTUAL_MISSING!>x<!> = super.x
}
actual open class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>Foo2<!> : Open()
actual open class Foo2 : Open()
open class WithFinal {
val x = "42"
}
actual open class Foo3 : WithFinal()
actual open class Foo3 : WithFinal()