Add regression tests for modality changes

Motivation: the discovered false negative in test
changeModalityFromAbstractToOpenInOverride.kt

Unfortunately, it can't be fixed in K1, so we will just live with that.
Luckily, we report ABSTRACT_MEMBER_NOT_IMPLEMENTED additionally.

In K2, MODALITY_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION
will be correctly reported as a compilation error

In scope of: KT-22841
Review: https://jetbrains.team/p/kt/reviews/11867/timeline
This commit is contained in:
Nikita Bobko
2023-08-23 16:41:53 +02:00
committed by teamcity
parent 21dffe4639
commit 17089276a7
11 changed files with 155 additions and 9 deletions
@@ -371,9 +371,27 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
}
@Test
@TestMetadata("changeModalityInOverride.kt")
public void testChangeModalityInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt");
@TestMetadata("changeModalityFromAbstractToFinalInOverride.kt")
public void testChangeModalityFromAbstractToFinalInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromAbstractToOpenInOverride.kt")
public void testChangeModalityFromAbstractToOpenInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromOpenToAbstractInOverride.kt")
public void testChangeModalityFromOpenToAbstractInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromOpenToFinalInOverride.kt")
public void testChangeModalityFromOpenToFinalInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.kt");
}
@Test
@@ -371,9 +371,27 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
}
@Test
@TestMetadata("changeModalityInOverride.kt")
public void testChangeModalityInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt");
@TestMetadata("changeModalityFromAbstractToFinalInOverride.kt")
public void testChangeModalityFromAbstractToFinalInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromAbstractToOpenInOverride.kt")
public void testChangeModalityFromAbstractToOpenInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromOpenToAbstractInOverride.kt")
public void testChangeModalityFromOpenToAbstractInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromOpenToFinalInOverride.kt")
public void testChangeModalityFromOpenToFinalInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.kt");
}
@Test
@@ -0,0 +1,15 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
<!INCOMPATIBLE_MATCHING{JVM}!>fun foo()<!>
}
<!INCOMPATIBLE_MATCHING{JVM}!>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 foo() {}
}
@@ -0,0 +1,15 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
fun foo()
}
expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED, ABSTRACT_MEMBER_NOT_IMPLEMENTED{JVM}!>class Foo<!> : Base
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual open <!ACTUAL_CLASSIFIER_MUST_HAVE_THE_SAME_MEMBERS_AS_NON_FINAL_EXPECT_CLASSIFIER!>class Foo<!> : Base {
<!MODALITY_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION!>final<!> override fun foo() {}
}
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
<!INCOMPATIBLE_MATCHING{JVM}!>fun foo()<!>
}
<!INCOMPATIBLE_MATCHING{JVM}!>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`.
// Luckily, we report ABSTRACT_MEMBER_NOT_IMPLEMENTED additionally.
actual open class Foo : Base {
override fun foo() {}
}
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
fun foo()
}
expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED, ABSTRACT_MEMBER_NOT_IMPLEMENTED{JVM}!>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`.
// Luckily, we report ABSTRACT_MEMBER_NOT_IMPLEMENTED additionally.
actual open class Foo : Base {
override fun foo() {}
}
@@ -0,0 +1,14 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
<!INCOMPATIBLE_MATCHING{JVM}!>fun foo() {}<!>
}
<!INCOMPATIBLE_MATCHING{JVM}!>expect abstract class Foo() : Base<!>
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual abstract class Foo : Base {
abstract override fun foo()
}
@@ -0,0 +1,14 @@
// 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 <!ACTUAL_CLASSIFIER_MUST_HAVE_THE_SAME_MEMBERS_AS_NON_FINAL_EXPECT_CLASSIFIER!>class Foo<!> : Base {
<!MODALITY_CHANGED_IN_NON_FINAL_EXPECT_CLASSIFIER_ACTUALIZATION!>abstract<!> override fun foo()
}
@@ -23240,9 +23240,27 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
}
@Test
@TestMetadata("changeModalityInOverride.kt")
public void testChangeModalityInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt");
@TestMetadata("changeModalityFromAbstractToFinalInOverride.kt")
public void testChangeModalityFromAbstractToFinalInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromAbstractToOpenInOverride.kt")
public void testChangeModalityFromAbstractToOpenInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromOpenToAbstractInOverride.kt")
public void testChangeModalityFromOpenToAbstractInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt");
}
@Test
@TestMetadata("changeModalityFromOpenToFinalInOverride.kt")
public void testChangeModalityFromOpenToFinalInOverride() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.kt");
}
@Test