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
|
@Test
|
||||||
@TestMetadata("changeModalityInOverride.kt")
|
@TestMetadata("changeModalityFromAbstractToFinalInOverride.kt")
|
||||||
public void testChangeModalityInOverride() throws Exception {
|
public void testChangeModalityFromAbstractToFinalInOverride() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt");
|
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
|
@Test
|
||||||
|
|||||||
+21
-3
@@ -371,9 +371,27 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("changeModalityInOverride.kt")
|
@TestMetadata("changeModalityFromAbstractToFinalInOverride.kt")
|
||||||
public void testChangeModalityInOverride() throws Exception {
|
public void testChangeModalityFromAbstractToFinalInOverride() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt");
|
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
|
@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
|
@Test
|
||||||
@TestMetadata("changeModalityInOverride.kt")
|
@TestMetadata("changeModalityFromAbstractToFinalInOverride.kt")
|
||||||
public void testChangeModalityInOverride() throws Exception {
|
public void testChangeModalityFromAbstractToFinalInOverride() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt");
|
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
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user