[FE 1.0] Prohibit implicit Java actualization in K1

^KT-58545 Fixed
Review: https://jetbrains.team/p/kt/reviews/10561

It's not yet supported in K2 KT-59213

Related tests:
- ApiTest.testStdlib
- RuntimePublicAPITest.kotlinStdlibRuntimeMerged
- KotlinProjectViewTestGenerated.test_Arrays (in Kotlin plugin)
This commit is contained in:
Nikita Bobko
2023-06-02 18:06:11 +02:00
parent d0452d569f
commit f4ba5aaf9a
18 changed files with 268 additions and 5 deletions
@@ -0,0 +1,20 @@
// WITH_STDLIB
// MODULE: m1-common
// FILE: common.kt
import kotlin.jvm.ImplicitlyActualizedByJvmDeclaration
<!NO_ACTUAL_FOR_EXPECT{JVM}!>@OptIn(ExperimentalMultiplatform::class)
@ImplicitlyActualizedByJvmDeclaration
expect class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Foo<!>() {
fun foo()
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: Foo.java
public class Foo {
public void foo() {
}
}
@@ -0,0 +1,20 @@
// WITH_STDLIB
// MODULE: m1-common
// FILE: common.kt
import kotlin.jvm.ImplicitlyActualizedByJvmDeclaration
@OptIn(ExperimentalMultiplatform::class)
@ImplicitlyActualizedByJvmDeclaration
expect class Foo() {
fun foo()
}
// MODULE: m2-jvm()()(m1-common)
// FILE: Foo.java
public class Foo {
public void foo() {
}
}
@@ -0,0 +1,14 @@
// MODULE: m1-common
// FILE: common.kt
<!NO_ACTUAL_FOR_EXPECT{JVM}!>expect class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Foo<!>() {
fun foo()
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: Foo.java
public class Foo {
public void foo() {
}
}
@@ -0,0 +1,14 @@
// MODULE: m1-common
// FILE: common.kt
expect class <!IMPLICIT_JVM_ACTUALIZATION{JVM}!>Foo<!>() {
fun foo()
}
// MODULE: m2-jvm()()(m1-common)
// FILE: Foo.java
public class Foo {
public void foo() {
}
}
@@ -0,0 +1,20 @@
// MODULE: m1-common
// FILE: common.kt
<!INCOMPATIBLE_MATCHING{JVM}!>expect class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Foo<!>(i: Int) {
fun foo()
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: Foo.java
public class Foo {
public Foo(int i) {}
public void foo() {}
}
// FILE: jvm.kt
class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Foo<!><T>(t: T) {
fun foo() {}
}
@@ -0,0 +1,20 @@
// MODULE: m1-common
// FILE: common.kt
expect class <!IMPLICIT_JVM_ACTUALIZATION{JVM}!>Foo<!>(i: Int) {
fun <!AMBIGUOUS_ACTUALS{JVM}!>foo<!>()
}
// MODULE: m2-jvm()()(m1-common)
// FILE: Foo.java
public class Foo {
public Foo(int i) {}
public void foo() {}
}
// FILE: jvm.kt
class Foo<T>(t: T) {
fun foo() {}
}