[Fir2IR] Don't build overrides for expect classes.

We don't need them except for checking.
And checking doesn't work in any reasonable way anyway.

^KT-65249 Fixed
This commit is contained in:
Pavel Kunyavskiy
2024-02-09 12:47:01 +01:00
committed by Space Team
parent baaaf4567e
commit 8d725753f8
65 changed files with 133 additions and 488 deletions
@@ -38301,6 +38301,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -38301,6 +38301,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -193,8 +193,16 @@ private fun IrFakeOverrideBuilder.buildForAll(
element.acceptChildrenVoid(this) element.acceptChildrenVoid(this)
} }
private fun isIgnoredClass(declaration: IrClass) : Boolean {
return when {
declaration.isExpect -> true
declaration.metadata is MetadataSource.CodeFragment -> true
else -> false
}
}
override fun visitClass(declaration: IrClass) { override fun visitClass(declaration: IrClass) {
if (declaration.metadata !is MetadataSource.CodeFragment) { if (!isIgnoredClass(declaration)) {
buildFakeOverrides(declaration) buildFakeOverrides(declaration)
} }
declaration.acceptChildrenVoid(this) declaration.acceptChildrenVoid(this)
@@ -38146,6 +38146,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -38146,6 +38146,12 @@ public class FirLightTreeBlackBoxCodegenWithFir2IrFakeOverrideGeneratorTestGener
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -38146,6 +38146,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -0,0 +1,26 @@
// LANGUAGE: +MultiPlatformProjects
// MODULE: common
// FILE: common.kt
interface Source {
fun read(sink: Buffer): String
}
expect class Buffer()
expect abstract class ForwardingSource: Source {
override fun read(sink: Buffer): String
}
// MODULE: jvm()()(common)
// FILE: platfrom.kt
actual class Buffer actual constructor()
actual abstract class ForwardingSource : Source {
actual override fun read(sink: Buffer): String = "OK"
}
fun box() : String{
return (object : ForwardingSource() {}).read(Buffer())
}
@@ -5,7 +5,7 @@ open class Base {
open fun <T> foo(t: T) {} open fun <T> foo(t: T) {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<!> expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,15 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open fun <T> foo(t: T) {}
}
expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override fun <R> <!ACTUAL_WITHOUT_EXPECT!>foo<!>(t: R) {}
}
@@ -7,8 +7,8 @@ open class Base {
open lateinit var green: String open lateinit var green: String
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base { expect open class Foo : Base {
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,20 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open var red1: String = ""
open lateinit var red2: String
open lateinit var green: String
}
expect open class Foo : Base {
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override lateinit var <!ACTUAL_WITHOUT_EXPECT!>red1<!>: String
override var <!ACTUAL_WITHOUT_EXPECT!>red2<!>: String = ""
override lateinit var green: String
}
@@ -5,7 +5,7 @@ interface Base {
fun foo() fun foo()
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!> : Base<!> expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!> : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,15 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
fun foo()
}
expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!> : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base {
final override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {}
}
@@ -3,7 +3,7 @@
interface Base { interface Base {
fun foo() fun foo()
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!>() : Base<!> expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!>() : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
@@ -1,17 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
fun foo()
}
expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Foo<!>() : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
// Mismatched scope must be reported here. But it's false negative checker in K1.
// For some reason, K1 says that modality of `exect_Foo.foo` is `abstract`.
// https://youtrack.jetbrains.com/issue/KT-59739
actual open class Foo : Base {
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {}
}
@@ -3,7 +3,7 @@
interface Base { interface Base {
fun foo() {} fun foo() {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect abstract class Foo() : Base<!> expect abstract class Foo() : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
@@ -1,14 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
fun foo() {}
}
expect abstract class Foo() : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual abstract class Foo : Base {
abstract override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>()
}
@@ -5,7 +5,7 @@ open class Base {
open fun foo() {} open fun foo() {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<!> expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,15 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open fun foo() {}
}
expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
final override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {}
}
@@ -5,7 +5,7 @@ open class Base<T> {
open fun foo(t: T) {} open fun foo(t: T) {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<String><!> expect open class Foo : Base<String>
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,15 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base<T> {
open fun foo(t: T) {}
}
expect open class Foo : Base<String>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base<String>() {
final override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(t: String) {}
}
@@ -1,7 +1,7 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo<!> expect open class Foo
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,11 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
expect open class Foo
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo {
final override fun <!ACTUAL_WITHOUT_EXPECT!>toString<!>() = "Foo"
}
@@ -5,7 +5,7 @@ open class Base {
open fun foo(param: Int) {} open fun foo(param: Int) {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo1 : Base<!> expect open class Foo1 : Base
expect open class Foo2 : Base expect open class Foo2 : Base
expect open class Foo3 { expect open class Foo3 {
open fun foo(param: Int) open fun foo(param: Int)
@@ -1,34 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open fun foo(param: Int) {}
}
expect open class Foo1 : Base
expect open class Foo2 : Base
expect open class Foo3 {
open fun foo(param: Int)
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo1 : Base() {
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(paramNameChanged: Int) {}
}
actual typealias Foo2 = Foo2Java
actual typealias Foo3 = Foo3Java
// FILE: Foo2Java.java
public class Foo2Java extends Base {
@Override
public void foo(int paramNameChanged) {}
}
// FILE: Foo3Java.java
public class Foo3Java {
public void foo(int paramNameChanged) {}
}
@@ -6,7 +6,7 @@ open class Base {
protected set protected set
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<!> expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,17 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open var foo: String = ""
protected set
}
expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override var <!ACTUAL_WITHOUT_EXPECT!>foo<!>: String = ""
public set
}
@@ -5,8 +5,8 @@ open class Base {
open fun foo(vararg bar: Int) {} open fun foo(vararg bar: Int) {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base { expect open class Foo : Base {
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,16 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open fun foo(vararg bar: Int) {}
}
expect open class Foo : Base {
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(bar: IntArray) {}
}
@@ -5,7 +5,7 @@ open class Base {
protected open fun foo() {} protected open fun foo() {}
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<!> expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,15 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
protected open fun foo() {}
}
expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
public override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {}
}
@@ -6,8 +6,8 @@ open class Base {
open fun foo(): Any = "" open fun foo(): Any = ""
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base { expect open class Foo : Base {
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,17 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open val foo: String = ""
open fun foo(): Any = ""
}
expect open class Foo : Base {
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(): String = ""
}
@@ -7,8 +7,8 @@ open class Base {
open fun foo(): I = null!! open fun foo(): I = null!!
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo<T : I> : Base { expect open class Foo<T : I> : Base {
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,18 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
interface I
open class Base {
open fun foo(): I = null!!
}
expect open class Foo<T : I> : Base {
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo<T : I> : Base() {
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(): T = null!!
}
@@ -5,8 +5,8 @@ open class Base<R> {
open fun foo(): R = null!! open fun foo(): R = null!!
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo<R, T : R> : Base<R> { expect open class Foo<R, T : R> : Base<R> {
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,16 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base<R> {
open fun foo(): R = null!!
}
expect open class Foo<R, T : R> : Base<R> {
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo<E, F : E> : Base<E>() {
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(): F = null!!
}
@@ -6,7 +6,7 @@ open class Base {
open fun foo(): String = "" open fun foo(): String = ""
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<!> expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,16 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open val foo: Any = ""
open fun foo(): String = ""
}
expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override val <!ACTUAL_WITHOUT_EXPECT!>foo<!>: String = ""
}
@@ -5,9 +5,9 @@ expect open class Base {
open fun foo(): MutableList<String> open fun foo(): MutableList<String>
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base { expect open class Foo : Base {
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,33 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
expect open class Base {
open fun foo(): MutableList<String>
}
expect open class Foo : Base {
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual typealias Base = BaseJava
actual open class Foo : Base() {
// K1 doesn't report a diagnostic here because when it compares scopes it sees flexible type
// K2 will likely report a diagnostic here
// I don't think we can fix this 'K1 green -> K2 red'. It must be a rare case anyway.
override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>(): List<String> {
return super.foo()
}
}
// FILE: BaseJava.java
import java.util.List;
public class BaseJava {
public List<String> foo() {
return null;
}
}
@@ -5,7 +5,7 @@ open class Base {
open val foo: Int = 1 open val foo: Int = 1
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base<!> expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,15 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open val foo: Int = 1
}
expect open class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
override var <!ACTUAL_WITHOUT_EXPECT!>foo<!>: Int = 1
}
@@ -8,10 +8,10 @@ open class Base() {
protected open fun overrideVisibility(): Any = "" protected open fun overrideVisibility(): Any = ""
} }
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Base { expect open class Foo : Base {
fun existingMethod() fun existingMethod()
val existingParam: Int val existingParam: Int
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,29 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
open class Base() {
open fun overrideReturnType(): Any = ""
open fun overrideModality1(): Any = ""
open fun overrideModality2(): Any = ""
protected open fun overrideVisibility(): Any = ""
}
expect open class Foo : Base {
fun existingMethod()
val existingParam: Int
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Foo : Base() {
actual fun existingMethod() {}
actual val existingParam: Int = 904
fun injectedMethod() {}
val injectedProperty: Int = 42
override fun <!ACTUAL_WITHOUT_EXPECT!>overrideReturnType<!>(): String = ""
final override fun <!ACTUAL_WITHOUT_EXPECT!>overrideModality1<!>(): Any = ""
final override fun <!ACTUAL_WITHOUT_EXPECT!>overrideModality2<!>(): Any = ""
public override fun <!ACTUAL_WITHOUT_EXPECT!>overrideVisibility<!>(): Any = ""
}
@@ -10,10 +10,10 @@ expect open class Base<T>() {
open class Transitive : Base<String>() open class Transitive : Base<String>()
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect open class Foo : Transitive { expect open class Foo : Transitive {
fun existingMethod() fun existingMethod()
val existingParam: Int val existingParam: Int
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,31 +0,0 @@
// FIR status: KT-65249 K2: False positive modality is different for native compilation
// WITH_STDLIB
// MODULE: m1-common
// FILE: common.kt
expect open class Base<T>() {
fun existingMethodInBase(param: T)
}
open class Transitive : Base<String>()
expect open class Foo : Transitive {
fun existingMethod()
val existingParam: Int
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open class Base<T> {
actual fun existingMethodInBase(param: T) {}
open fun injected(param: T): Any = ""
}
actual open class Foo : Transitive() {
actual fun existingMethod() {}
actual val existingParam: Int = 904
override fun injected(param: String): String = "" // covariant override
}
@@ -1,10 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect enum class En {
E1,
<!EXPECTED_ENUM_ENTRY_WITH_BODY!>E2 {
<!EXPECTED_DECLARATION_WITH_BODY!>fun foo()<!> = ""
},<!>
<!EXPECTED_ENUM_ENTRY_WITH_BODY!>E3 { };<!>
}<!>
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
@@ -1,10 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
expect enum class En {
E1,
<!EXPECTED_ENUM_ENTRY_WITH_BODY!>E2 {
<!EXPECTED_DECLARATION_WITH_BODY!>fun foo()<!> = ""
},<!>
<!EXPECTED_ENUM_ENTRY_WITH_BODY!>E3 { };<!>
}
@@ -1,5 +1,5 @@
// MODULE: m1-common // MODULE: m1-common
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect interface Base<!> expect interface Base
// MODULE: m1-jvm()()(m1-common) // MODULE: m1-jvm()()(m1-common)
actual interface Base { actual interface Base {
@@ -1,7 +0,0 @@
// MODULE: m1-common
expect interface Base
// MODULE: m1-jvm()()(m1-common)
actual interface Base {
override fun <!ACTUAL_WITHOUT_EXPECT!>equals<!>(other: Any?): Boolean
}
@@ -1,7 +1,7 @@
// MODULE: common // MODULE: common
// FILE: common.kt // FILE: common.kt
expect class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Foo<!> <!NO_ACTUAL_FOR_EXPECT{JVM}!>expect class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Foo<!><!>
// MODULE: main()()(common) // MODULE: main()()(common)
// FILE: test.kt // FILE: test.kt
expect class Foo <!NO_ACTUAL_FOR_EXPECT!>expect class Foo<!>
@@ -2,10 +2,9 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
// K2: false positve INCOMPATIBLE_MATCHING: KT-60155 public expect abstract class AbstractMutableMap<K, V> : MutableMap<K, V> {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>public expect abstract class AbstractMutableMap<K, V> : MutableMap<K, V> {
override val values: MutableCollection<V> override val values: MutableCollection<V>
}<!> }
// MODULE: m2-jvm()()(m1-common) // MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -2,7 +2,6 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
// K2: false positve INCOMPATIBLE_MATCHING: KT-60155
public expect abstract class AbstractMutableMap<K, V> : MutableMap<K, V> { public expect abstract class AbstractMutableMap<K, V> : MutableMap<K, V> {
override val values: MutableCollection<V> override val values: MutableCollection<V>
} }
@@ -1,15 +0,0 @@
// WITH_STDLIB
// MODULE: m1-common
// FILE: common.kt
// K2: false positve INCOMPATIBLE_MATCHING: KT-60155
public expect abstract class AbstractMutableMap<K, V> : MutableMap<K, V> {
override val values: MutableCollection<V>
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
import java.util.AbstractMap
public actual abstract class <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>AbstractMutableMap<!><K, V>() : MutableMap<K, V>, AbstractMap<K, V>()
@@ -1,8 +1,8 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}!>expect class E01<!> expect class E01
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}!>expect class E02<!> expect class E02
// MODULE: m1-jvm()()(m1-common) // MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,13 +0,0 @@
// MODULE: m1-common
// FILE: common.kt
expect class E01
expect class E02
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
typealias MyNothing = Nothing
<!ACTUAL_TYPE_ALIAS_TO_NOTHING!>actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>E01<!> = Nothing<!>
<!ACTUAL_TYPE_ALIAS_NOT_TO_CLASS!>actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>E02<!> = MyNothing<!>
@@ -2,8 +2,8 @@
// MODULE: m1-common // MODULE: m1-common
// FILE: common.kt // FILE: common.kt
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}!>expect class E01<!> expect class E01
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}!>expect class E02<!> expect class E02
// MODULE: m1-jvm()()(m1-common) // MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt // FILE: jvm.kt
@@ -1,14 +0,0 @@
// LANGUAGE: -MultiplatformRestrictions
// MODULE: m1-common
// FILE: common.kt
expect class E01
expect class E02
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
typealias MyNothing = Nothing
actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>E01<!> = Nothing
<!ACTUAL_TYPE_ALIAS_NOT_TO_CLASS!>actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>E02<!> = MyNothing<!>
@@ -27394,6 +27394,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -27394,6 +27394,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT
runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -30465,6 +30465,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -31149,6 +31149,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {
@@ -27364,6 +27364,12 @@ public class FirWasmJsCodegenBoxTestGenerated extends AbstractFirWasmJsCodegenBo
runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt");
} }
@Test
@TestMetadata("kt-65249.kt")
public void testKt_65249() {
runTest("compiler/testData/codegen/box/multiplatform/k2/kt-65249.kt");
}
@Test @Test
@TestMetadata("mergedOverrides.kt") @TestMetadata("mergedOverrides.kt")
public void testMergedOverrides() { public void testMergedOverrides() {