From 17089276a7265a1e14788cc7f3b44f3d535ceed0 Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Wed, 23 Aug 2023 16:41:53 +0200 Subject: [PATCH] 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 --- ...DiagnosticsWithLightTreeTestGenerated.java | 24 ++++++++++++++++--- ...endMPPDiagnosticsWithPsiTestGenerated.java | 24 ++++++++++++++++--- ...dalityFromAbstractToFinalInOverride.fir.kt | 15 ++++++++++++ ...geModalityFromAbstractToFinalInOverride.kt | 15 ++++++++++++ ...odalityFromAbstractToOpenInOverride.fir.kt | 17 +++++++++++++ ...ngeModalityFromAbstractToOpenInOverride.kt | 17 +++++++++++++ ...odalityFromOpenToAbstractInOverride.fir.kt | 14 +++++++++++ ...ngeModalityFromOpenToAbstractInOverride.kt | 14 +++++++++++ ...eModalityFromOpenToFinalInOverride.fir.kt} | 0 ...hangeModalityFromOpenToFinalInOverride.kt} | 0 .../test/runners/DiagnosticTestGenerated.java | 24 ++++++++++++++++--- 11 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt rename compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/{changeModalityInOverride.fir.kt => changeModalityFromOpenToFinalInOverride.fir.kt} (100%) rename compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/{changeModalityInOverride.kt => changeModalityFromOpenToFinalInOverride.kt} (100%) diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java index 772946d2518..93568707faf 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java @@ -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 diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java index f415707dee1..7a1acef0740 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java @@ -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 diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt new file mode 100644 index 00000000000..de89a679b1d --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.fir.kt @@ -0,0 +1,15 @@ +// MODULE: m1-common +// FILE: common.kt + +interface Base { + fun foo() +} + +expect open class Foo : Base + +// MODULE: m2-jvm()()(m1-common) +// FILE: jvm.kt + +actual open class Foo : Base { + final override fun foo() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt new file mode 100644 index 00000000000..501f12e7aab --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToFinalInOverride.kt @@ -0,0 +1,15 @@ +// MODULE: m1-common +// FILE: common.kt + +interface Base { + fun foo() +} + +expect open class Foo : Base + +// MODULE: m2-jvm()()(m1-common) +// FILE: jvm.kt + +actual open class Foo : Base { + final override fun foo() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt new file mode 100644 index 00000000000..e8ad965bf7c --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.fir.kt @@ -0,0 +1,17 @@ +// MODULE: m1-common +// FILE: common.kt +interface Base { + fun foo() +} +expect open 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() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt new file mode 100644 index 00000000000..d8411563f22 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromAbstractToOpenInOverride.kt @@ -0,0 +1,17 @@ +// MODULE: m1-common +// FILE: common.kt +interface Base { + fun foo() +} +expect open 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() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt new file mode 100644 index 00000000000..62d34915c80 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.fir.kt @@ -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 class Foo : Base { + abstract override fun foo() +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt new file mode 100644 index 00000000000..060f55ef0f9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToAbstractInOverride.kt @@ -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 class Foo : Base { + abstract override fun foo() +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.fir.kt similarity index 100% rename from compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.fir.kt rename to compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.fir.kt diff --git a/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt b/compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.kt similarity index 100% rename from compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityInOverride.kt rename to compiler/testData/diagnostics/tests/multiplatform/actualClassifierMustHasTheSameMembersAsNonFinalExpectClassifierChecker/changeModalityFromOpenToFinalInOverride.kt diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 517b271ad13..88ef1883c69 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -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