[IR] Use common expect/actual matching algorithm in IR actualizer
^KT-58578 Fixed
This commit is contained in:
committed by
Space Team
parent
62534f43c9
commit
ba41e8ec38
+49
@@ -0,0 +1,49 @@
|
||||
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
expect class A {
|
||||
fun foo(p1: String = "common", p2: String = "common", p3: String)
|
||||
}
|
||||
|
||||
expect class B {
|
||||
fun foo(s: String)
|
||||
}
|
||||
|
||||
interface I {
|
||||
fun methodWithDefaultArg(s: String = "common")
|
||||
}
|
||||
|
||||
expect class WithDefaultArgFromSuper : I {
|
||||
override fun methodWithDefaultArg(s: String)
|
||||
}
|
||||
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class WithIncompatibility {
|
||||
fun foo(p: String = "common")
|
||||
}<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
class AImpl {
|
||||
fun foo(p1: String = "impl", p2: String = "impl", p3: String) {}
|
||||
}
|
||||
|
||||
<!DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS!>actual typealias A = AImpl<!>
|
||||
|
||||
class BImpl {
|
||||
fun foo(s: String = "impl") {}
|
||||
}
|
||||
|
||||
actual typealias B = BImpl
|
||||
|
||||
class WithDefaultArgFromSuperImpl : I {
|
||||
override fun methodWithDefaultArg(s: String) {}
|
||||
}
|
||||
|
||||
actual typealias WithDefaultArgFromSuper = WithDefaultArgFromSuperImpl
|
||||
|
||||
class WithIncompatibilityImpl {
|
||||
fun foo(p: String) {}
|
||||
}
|
||||
|
||||
<!DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS!>actual typealias WithIncompatibility = WithIncompatibilityImpl<!>
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect enum class Foo {
|
||||
ENTRY
|
||||
}<!>
|
||||
|
||||
expect enum class _TimeUnit
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
actual typealias Foo = FooImpl
|
||||
|
||||
actual typealias _TimeUnit = java.util.concurrent.TimeUnit
|
||||
|
||||
// FILE: FooImpl.java
|
||||
|
||||
public enum FooImpl {
|
||||
ENTRY("OK") {
|
||||
@Override
|
||||
public String getResult() {
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
protected final String value;
|
||||
|
||||
public FooImpl(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public abstract String getResult();
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect enum class Foo {
|
||||
ENTRY1,
|
||||
ENTRY2,
|
||||
ENTRY3;
|
||||
}<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
actual enum class Foo(val x: String) {
|
||||
ENTRY1("1"),
|
||||
ENTRY2("2"),
|
||||
ENTRY3("3");
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
|
||||
+4
-4
@@ -1,15 +1,15 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
// TODO: .fir.kt version is just a stub.
|
||||
expect interface My {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect interface My {
|
||||
open fun openFunPositive()
|
||||
open fun openFunNegative()
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>open fun openFunNegative()<!>
|
||||
abstract fun abstractFun()
|
||||
|
||||
open val openValPositive: Int
|
||||
open val openValNegative: Int
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>open val openValNegative: Int<!>
|
||||
abstract val abstractVal: Int
|
||||
}
|
||||
}<!>
|
||||
|
||||
// MODULE: m1-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
interface A
|
||||
interface B
|
||||
|
||||
expect fun <T> List<T>.foo() where T : A, T : B
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun <T> List<T>.foo() where T : A, T : B<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ expect annotation class Foo3
|
||||
expect annotation class Foo4
|
||||
expect annotation class Foo5()
|
||||
expect annotation class Foo6()
|
||||
expect annotation class Foo7()
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect annotation class Foo7<!INCOMPATIBLE_MATCHING{JVM}!>()<!><!>
|
||||
|
||||
@<!UNRESOLVED_REFERENCE!>Foo1<!>
|
||||
fun foo() {}
|
||||
|
||||
+3
-3
@@ -5,9 +5,9 @@ expect class Foo1
|
||||
expect class Foo2
|
||||
expect class Foo3
|
||||
|
||||
expect class Bar1()
|
||||
expect class Bar2()
|
||||
expect class Bar3()
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class Bar1<!INCOMPATIBLE_MATCHING{JVM}!>()<!><!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class Bar2<!INCOMPATIBLE_MATCHING{JVM}!>()<!><!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class Bar3<!INCOMPATIBLE_MATCHING{JVM}!>()<!><!>
|
||||
expect class Bar4()
|
||||
expect class Bar5()
|
||||
expect class Bar6()
|
||||
|
||||
+3
-3
@@ -3,12 +3,12 @@
|
||||
// FILE: common.kt
|
||||
|
||||
expect fun foo1(x: Int)
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect fun foo2(x: Int)<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}, INCOMPATIBLE_MATCHING{JVM}!>expect fun foo2(x: Int)<!>
|
||||
|
||||
expect class NoArgConstructor()
|
||||
|
||||
expect fun foo3(): Int
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect fun foo4(): Int<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun foo3(): Int<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun foo4(): Int<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
|
||||
|
||||
+4
-4
@@ -5,9 +5,9 @@ expect fun interface F1 {
|
||||
fun run()
|
||||
}
|
||||
|
||||
expect fun interface F2 {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun interface F2 {
|
||||
fun run()
|
||||
}
|
||||
}<!>
|
||||
|
||||
expect fun interface F3 {
|
||||
fun run()
|
||||
@@ -21,9 +21,9 @@ expect fun interface F5 {
|
||||
fun run()
|
||||
}
|
||||
|
||||
expect fun interface F6 {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun interface F6 {
|
||||
fun run()
|
||||
}
|
||||
}<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
|
||||
|
||||
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
expect class C1
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect interface C2<A><!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect interface C3<B><!>
|
||||
expect interface C4<D, E>
|
||||
expect interface C5<F, G>
|
||||
expect interface C6<H>
|
||||
expect interface C7<I>
|
||||
expect interface C8<J>
|
||||
expect interface C9<K>
|
||||
expect interface C10<L>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
class A<T : A<T>>
|
||||
class B<T>
|
||||
|
||||
actual typealias C1 = String
|
||||
<!ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>actual typealias C2<A> = List<String><!>
|
||||
<!ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>actual typealias C3<B> = List<B><!>
|
||||
actual typealias C4<D, E> = MutableMap<D, E>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C5<F, G> = MutableMap<G, F><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C51 = MutableMap<String, String><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C52<F> = MutableMap<F, String><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C53<T> = A<A<T>><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C54<T> = B<List<String>><!>
|
||||
actual typealias C6<H> = MutableList<H>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>actual typealias C7<I> = MutableList<out I><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>actual typealias C8<J> = MutableList<*><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>actual typealias C9<K> = MutableList<in K><!>
|
||||
|
||||
typealias Tmp<K> = MutableList<K>
|
||||
<!ACTUAL_TYPE_ALIAS_NOT_TO_CLASS!>actual typealias C10<L> = Tmp<L><!>
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
+6
-6
@@ -2,20 +2,20 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
expect open class Container {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class Container {
|
||||
fun publicFun()
|
||||
|
||||
internal fun internalFun1()
|
||||
internal fun internalFun2()
|
||||
internal fun internalFun3()
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>internal fun internalFun3()<!>
|
||||
|
||||
protected fun protectedFun1()
|
||||
protected fun protectedFun2()
|
||||
protected fun protectedFun3()
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>protected fun protectedFun3()<!>
|
||||
|
||||
open internal fun openInternalFun()
|
||||
open fun openPublicFun()
|
||||
}
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>open internal fun openInternalFun()<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>open fun openPublicFun()<!>
|
||||
}<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -14,9 +14,9 @@ expect class C {
|
||||
<!WRONG_MODIFIER_TARGET!>expect<!> inner class I
|
||||
}
|
||||
|
||||
expect class D {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class D {
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>class N<!>
|
||||
}
|
||||
}<!>
|
||||
|
||||
expect class E {
|
||||
class N
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
expect class Foo {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class Foo {
|
||||
fun bar(): String
|
||||
fun bas(f: Int)
|
||||
}
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>fun bas(f: Int)<!>
|
||||
}<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ interface J
|
||||
|
||||
expect class Foo : I, C, J
|
||||
|
||||
<!SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR, SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR!>expect class Bar : C()<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}, SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR, SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR!>expect class Bar : C()<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
// FILE: common.kt
|
||||
|
||||
class Foo {
|
||||
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY, NO_ACTUAL_FOR_EXPECT{JVM}!><!WRONG_MODIFIER_TARGET!>expect<!> fun bar(): String<!>
|
||||
<!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!><!WRONG_MODIFIER_TARGET!>expect<!> fun bar(): String<!>
|
||||
}
|
||||
|
||||
// MODULE: m1-jvm()()(m1-common)
|
||||
|
||||
@@ -26,7 +26,7 @@ interface KotlinXStringDemoInterface {
|
||||
val value: String
|
||||
}
|
||||
|
||||
expect fun StringDemoInterface.plusK(): String
|
||||
<!INCOMPATIBLE_MATCHING{JS}!>expect fun StringDemoInterface.plusK(): String<!>
|
||||
|
||||
// MODULE: js()()(common, intermediate)
|
||||
// TARGET_PLATFORM: JS
|
||||
@@ -34,7 +34,7 @@ expect fun StringDemoInterface.plusK(): String
|
||||
// FILE: StringDemoInterface.kt
|
||||
actual typealias StringDemoInterface = KotlinXStringDemoInterface
|
||||
|
||||
<!ACTUAL_WITHOUT_EXPECT("actual fun StringDemoInterface.plusK(): <ERROR TYPE REF: Unresolved name: value>; The following declaration is incompatible: expect fun StringDemoInterface.plusK(): String")!>actual fun StringDemoInterface.plusK() = <!RESOLUTION_TO_CLASSIFIER!>StringValue<!>(value).plus("K").<!UNRESOLVED_REFERENCE!>value<!><!>
|
||||
<!ACTUAL_WITHOUT_EXPECT("actual fun StringDemoInterface.plusK(): <ERROR TYPE REF: Unresolved name: value>; The following declaration is incompatible: expect fun StringDemoInterface.plusK(): String")!>actual fun StringDemoIn<!INCOMPATIBLE_MATCHING!>terface.plusK() = <!RESOLUTION_TO_CLASSIFIER!>StringValue<!>(value).plus("K")<!>.<!UNRESOLVED_REFERENCE!>value<!><!>
|
||||
|
||||
// FILE: main.kt
|
||||
class StringDemo(override val value: String) : StringDemoInterface
|
||||
|
||||
+4
-4
@@ -3,10 +3,10 @@
|
||||
// TARGET_PLATFORM: Common
|
||||
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect class CommonClass {
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>fun memberFun()<!>
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>val memberProp: Int<!>
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>class Nested<!>
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>inner class Inner<!>
|
||||
fun memberFun()
|
||||
val memberProp: Int
|
||||
class Nested
|
||||
inner class Inner
|
||||
}<!>
|
||||
<!ACTUAL_WITHOUT_EXPECT!>actual class CommonClass {
|
||||
<!ACTUAL_WITHOUT_EXPECT!>actual fun memberFun() {}<!>
|
||||
|
||||
+2
-2
@@ -13,8 +13,8 @@ val callableKind: Int = 1
|
||||
expect fun <T> typeParameterCount()
|
||||
fun typeParameterCount() {}
|
||||
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}!>expect enum class EnumEntries {
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>ONE,<!> <!NO_ACTUAL_FOR_EXPECT{JVM}!>TWO;<!>
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect enum class EnumEntries {
|
||||
ONE, TWO;
|
||||
}<!>
|
||||
<!ACTUAL_WITHOUT_EXPECT!>actual enum class EnumEntries {
|
||||
ONE;
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
expect class Foo {
|
||||
constructor(p: Any)
|
||||
|
||||
fun f1(s: String): Int
|
||||
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>fun f2(s: List<String>?): MutableMap<Boolean?, Foo><!>
|
||||
|
||||
fun <T : Set<Number>> f3(t: T): T?
|
||||
}
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: FooImpl.java
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class FooImpl {
|
||||
public FooImpl(Object p) {}
|
||||
|
||||
public final int f1(String s) { return 0; }
|
||||
|
||||
public final Map<Boolean, FooImpl> f2(List<String> s) { return null; }
|
||||
|
||||
public final <T extends Set<Number>> T f3(T t) { return null; }
|
||||
}
|
||||
|
||||
// FILE: jvm.kt
|
||||
|
||||
actual typealias Foo = FooImpl
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
expect class SomeClass<T> {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class SomeClass<T> {
|
||||
fun foo()
|
||||
}
|
||||
}<!>
|
||||
|
||||
// MODULE: m1-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
inline expect fun inlineFun()
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>inline expect fun inlineFun()<!>
|
||||
expect fun nonInlineFun()
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
|
||||
Vendored
+4
-4
@@ -3,15 +3,15 @@
|
||||
// FILE: common.kt
|
||||
|
||||
expect fun f1(s: () -> String)
|
||||
expect inline fun f2(s: () -> String)
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect inline fun f2(s: () -> String)<!>
|
||||
expect inline fun f3(noinline s: () -> String)
|
||||
|
||||
expect fun f4(s: () -> String)
|
||||
expect inline fun f5(s: () -> String)
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect inline fun f5(s: () -> String)<!>
|
||||
expect inline fun f6(crossinline s: () -> String)
|
||||
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect fun f7(x: Any)<!>
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect fun f8(vararg x: Any)<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun f7(x: Any)<!>
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect fun f8(vararg x: Any)<!>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
+9
-9
@@ -1,20 +1,20 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
expect var v1: Boolean
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect var v1: Boolean<!>
|
||||
|
||||
expect var v2: Boolean
|
||||
internal set
|
||||
|
||||
expect var v3: Boolean
|
||||
internal set
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect var v3: Boolean
|
||||
internal set<!>
|
||||
|
||||
expect open class C {
|
||||
var foo: Boolean
|
||||
}
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class C {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>var foo: Boolean<!>
|
||||
}<!>
|
||||
|
||||
expect open class C2 {
|
||||
var foo: Boolean
|
||||
}
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect open class C2 {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>var foo: Boolean<!>
|
||||
}<!>
|
||||
|
||||
// MODULE: m1-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
Reference in New Issue
Block a user