[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
This commit is contained in:
Roman Efremov
2023-04-03 18:17:21 +02:00
committed by Space Team
parent c3734aa9ce
commit bcf4528763
7 changed files with 50 additions and 5 deletions
@@ -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 {
@@ -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 {
@@ -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,
@@ -0,0 +1,13 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
<!ACTUAL_WITHOUT_EXPECT!>actual fun bar()<!>
}
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo {
actual fun bar() {}
}
@@ -0,0 +1,13 @@
// MODULE: m1-common
// FILE: common.kt
expect class Foo {
actual fun <!ACTUAL_WITHOUT_EXPECT{JVM}!>bar<!>()
}
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
actual class Foo {
actual fun bar() {}
}
@@ -1,12 +1,12 @@
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>impl<!> class <!NO_ACTUAL_FOR_EXPECT!>First<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>impl<!> class <!ACTUAL_WITHOUT_EXPECT, NO_ACTUAL_FOR_EXPECT!>First<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class <!NO_ACTUAL_FOR_EXPECT!>Second<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!NO_ACTUAL_FOR_EXPECT!>Third<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!ACTUAL_WITHOUT_EXPECT, NO_ACTUAL_FOR_EXPECT!>Third<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class <!NO_ACTUAL_FOR_EXPECT!>Fourth<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class <!ACTUAL_WITHOUT_EXPECT, NO_ACTUAL_FOR_EXPECT!>Fourth<!>
<!DEPRECATED_MODIFIER, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!ACTUAL_WITHOUT_EXPECT!>Fifth<!>
<!INCOMPATIBLE_MODIFIERS!>expect<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!NO_ACTUAL_FOR_EXPECT!>Sixth<!>
<!INCOMPATIBLE_MODIFIERS!>expect<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!ACTUAL_WITHOUT_EXPECT, NO_ACTUAL_FOR_EXPECT!>Sixth<!>
@@ -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 {