[FIR] 2/2 Support more wider actual member visibility, if the expect member is effectively final

^KT-61955 Fixed

Introduce LV vs don't introduce LV:

introduce LV:
- K1 IDE and K2 project: IDE accurately shows compiler errors
- K2 IDE and K1 project: There are cases when IDE shows red but in reality it's green

don't introduce LV:
- K1 IDE and K2 project: There are cases when IDE shows red but in reality it's green
- K2 IDE and K1 project: There are cases when IDE shows green but in reality it's red
This commit is contained in:
Nikita Bobko
2023-09-14 20:26:14 +02:00
committed by Space Team
parent e13ebe8474
commit 7b8445f914
13 changed files with 246 additions and 3 deletions
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
internal open fun foo() {}
}
expect class Foo : Base {
override fun foo()
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
public actual override fun foo() {
}
}
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
internal open fun foo() {}
}
expect class Foo : Base {
override fun foo()
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
<!ACTUAL_WITHOUT_EXPECT!>public<!> actual override fun foo() {
}
}
@@ -0,0 +1,16 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
open class Base {
protected open fun foo() {}
}
expect class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
public override fun foo() {
}
}
@@ -0,0 +1,18 @@
// LANGUAGE: -SupportEffectivelyFinalInExpectActualVisibilityCheck
// MODULE: m1-common
// FILE: common.kt
open class Base {
internal open fun foo() {}
}
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>expect class Foo : Base {
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}!>override fun foo()<!>
}<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
public actual override fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {
}
}
@@ -0,0 +1,18 @@
// LANGUAGE: -SupportEffectivelyFinalInExpectActualVisibilityCheck
// MODULE: m1-common
// FILE: common.kt
open class Base {
internal open fun foo() {}
}
expect class Foo : Base {
override fun foo()
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
<!ACTUAL_WITHOUT_EXPECT!>public<!> actual override fun foo() {
}
}
@@ -0,0 +1,19 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open var foo: Int = 2
internal set
}
expect class Foo : Base {
override var foo: Int
internal set
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
actual override var foo: Int = 2
public set
}
@@ -0,0 +1,19 @@
// MODULE: m1-common
// FILE: common.kt
open class Base {
open var foo: Int = 2
internal set
}
expect class Foo : Base {
override var foo: Int
internal set
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
actual override var foo: Int = 2
<!ACTUAL_WITHOUT_EXPECT!>public<!> set
}
@@ -0,0 +1,17 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
open class Base {
open var foo: Int = 2
protected set
}
expect class Foo : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo : Base() {
override var foo: Int = 2
public set
}