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:
+21
-3
@@ -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
|
||||
|
||||
+21
-3
@@ -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
|
||||
|
||||
+15
@@ -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() {}
|
||||
}
|
||||
+15
@@ -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() {}
|
||||
}
|
||||
+17
@@ -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() {}
|
||||
}
|
||||
+17
@@ -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() {}
|
||||
}
|
||||
+14
@@ -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()
|
||||
}
|
||||
+14
@@ -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()
|
||||
}
|
||||
Generated
+21
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user