From bcf45287632c0e2186e7514271d65b85c7d3deb6 Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Mon, 3 Apr 2023 18:17:21 +0200 Subject: [PATCH] [MPP] Forbid actual member in expect class Such member descriptor will be actual and expect at the same time, so we should run both checks. ^KT-40903 Fixed --- ...endMPPDiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ ...dFrontendMPPDiagnosticsWithPsiTestGenerated.java | 6 ++++++ .../checkers/ExpectedActualDeclarationChecker.kt | 3 ++- .../headerClass/actualMethodInExpectClass.fir.kt | 13 +++++++++++++ .../headerClass/actualMethodInExpectClass.kt | 13 +++++++++++++ .../tests/multiplatform/incompatibles.kt | 8 ++++---- .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 7 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt 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 212fa6b2028..1ffcb6cdd8e 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 @@ -343,6 +343,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt"); } + @Test + @TestMetadata("actualMethodInExpectClass.kt") + public void testActualMethodInExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt"); + } + @Test @TestMetadata("actualMissing.kt") public void testActualMissing() throws Exception { 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 08d3fd7ab62..b09ae473ae0 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 @@ -343,6 +343,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt"); } + @Test + @TestMetadata("actualMethodInExpectClass.kt") + public void testActualMethodInExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt"); + } + @Test @TestMetadata("actualMissing.kt") public void testActualMissing() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt index c20c5fe73fe..49150e08c7d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectedActualDeclarationChecker.kt @@ -63,7 +63,8 @@ class ExpectedActualDeclarationChecker( declaration, descriptor, context.trace, checkActualModifier, context.expectActualTracker ) - } else if (descriptor.isActualOrSomeContainerIsActual()) { + } + if (descriptor.isActualOrSomeContainerIsActual()) { val allDependsOnModules = moduleStructureOracle.findAllDependsOnPaths(descriptor.module).flatMap { it.nodes }.toHashSet() checkActualDeclarationHasExpected( declaration, diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.fir.kt new file mode 100644 index 00000000000..933c0c17701 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.fir.kt @@ -0,0 +1,13 @@ +// MODULE: m1-common +// FILE: common.kt + +expect class Foo { + actual fun bar() +} + +// MODULE: m1-jvm()()(m1-common) +// FILE: jvm.kt + +actual class Foo { + actual fun bar() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt new file mode 100644 index 00000000000..62e2f1990b3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt @@ -0,0 +1,13 @@ +// MODULE: m1-common +// FILE: common.kt + +expect class Foo { + actual fun bar() +} + +// MODULE: m1-jvm()()(m1-common) +// FILE: jvm.kt + +actual class Foo { + actual fun bar() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt b/compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt index a6fecf37452..3823cd4dcac 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt @@ -1,12 +1,12 @@ -header impl class First +header impl class First header expect class Second -header actual class Third +header actual class Third -impl expect class Fourth +impl expect class Fourth impl actual class Fifth -expect actual class Sixth +expect actual class Sixth 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 d4cff3529ab..724942b2387 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 @@ -22122,6 +22122,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/actualClassWithDifferentConstructors.kt"); } + @Test + @TestMetadata("actualMethodInExpectClass.kt") + public void testActualMethodInExpectClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/headerClass/actualMethodInExpectClass.kt"); + } + @Test @TestMetadata("actualMissing.kt") public void testActualMissing() throws Exception {