From f4a648aa3ed6364bbf04393e6eb14c413bc6d3fa Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Tue, 13 Jun 2023 16:46:07 +0200 Subject: [PATCH] [K2, MPP] Fix NO_ACTUAL_FOR_EXPECT reporting for all modules including the platform ones ^KT-58483 Fixed --- ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++ ...endMPPDiagnosticsWithPsiTestGenerated.java | 6 +++ .../actualizer/ExpectActualCollector.kt | 6 +++ .../checkNoActualForExpectInLastModule.fir.kt | 4 ++ .../checkNoActualForExpectInLastModule.kt | 4 ++ .../enum/constructorInHeaderEnum.fir.kt | 8 ++-- .../enum/enumEntryWithBody.fir.kt | 4 +- ...pectClassWithExplicitAbstractMember.fir.kt | 22 +++++++++++ .../expectClassWithExplicitAbstractMember.kt | 1 - .../explicitConstructorDelegation.fir.kt | 8 ++-- ...tendExpectedClassWithAbstractMember.fir.kt | 32 ++++++++-------- .../headerClassWithFunctionBody.fir.kt | 4 +- ...nheritanceByDelegationInExpectClass.fir.kt | 4 +- .../headerClass/memberPropertyKinds.fir.kt | 4 +- .../headerClass/smartCastOnExpectClass.fir.kt | 12 ++++++ .../headerClass/smartCastOnExpectClass.kt | 1 - .../tests/multiplatform/incompatibles.fir.kt | 10 ++--- .../conflictingHeaderDeclarations.fir.kt | 7 ++++ .../conflictingHeaderDeclarations.kt | 1 - .../headerDeclarationWithBody.fir.kt | 8 ++++ .../topLevelFun/headerDeclarationWithBody.kt | 1 - .../topLevelFun/headerWithoutImpl.fir.kt | 4 ++ .../topLevelFun/headerWithoutImpl.kt | 1 - .../differentKindsOfProperties.fir.kt | 38 +++++++++---------- .../test/runners/DiagnosticTestGenerated.java | 6 +++ 25 files changed, 141 insertions(+), 61 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.fir.kt create mode 100644 compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.fir.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 bff2a3b1ff1..079a5719dae 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 @@ -25,6 +25,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/multiplatform"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("checkNoActualForExpectInLastModule.kt") + public void testCheckNoActualForExpectInLastModule() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt"); + } + @Test @TestMetadata("expectAbstractToString.kt") public void testExpectAbstractToString() 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 1981a24b67e..52f510d0f5b 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 @@ -25,6 +25,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/multiplatform"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), TargetBackend.JVM_IR, true); } + @Test + @TestMetadata("checkNoActualForExpectInLastModule.kt") + public void testCheckNoActualForExpectInLastModule() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt"); + } + @Test @TestMetadata("expectAbstractToString.kt") public void testExpectAbstractToString() throws Exception { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt index 3f4e380daab..f1457c88a3a 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt @@ -62,6 +62,10 @@ internal class ExpectActualCollector( ) { val linkCollector = ExpectActualLinkCollector(destination, classActualizationInfo, typeSystemContext, diagnosticsReporter) dependentFragments.forEach { linkCollector.visitModuleFragment(it) } + // It doesn't make sense to link expects from the last module because actuals always should be located in another module + // Thus relevant actuals are always missing for the last module + // But the collector should be run anyway to detect and report "hanging" expect declarations + linkCollector.visitModuleFragment(mainFragment) } } @@ -77,6 +81,8 @@ internal data class ClassActualizationInfo( } } + + private class ActualDeclarationsCollector { companion object { fun collectActualsFromFragments(fragments: List): ClassActualizationInfo { diff --git a/compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.fir.kt new file mode 100644 index 00000000000..d0d72bc1d38 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.fir.kt @@ -0,0 +1,4 @@ +// ISSUE: KT-58483 +// MODULE: jvm +// FILE: jvm.kt +expect class A diff --git a/compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt b/compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt new file mode 100644 index 00000000000..3cb69195c9e --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt @@ -0,0 +1,4 @@ +// ISSUE: KT-58483 +// MODULE: jvm +// FILE: jvm.kt +expect class A diff --git a/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt index a19bd905193..eb1f983ccca 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt @@ -1,14 +1,14 @@ // MODULE: m1-common // FILE: common.kt -expect enum class En(x: Int) { +expect enum class En(x: Int) { E1, E2(42), ; constructor(s: String) -} +} -expect enum class En2 { +expect enum class En2 { E1() -} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/enum/enumEntryWithBody.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/enum/enumEntryWithBody.fir.kt index 9b97c8e9aa7..d8178b31ee5 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/enum/enumEntryWithBody.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/enum/enumEntryWithBody.fir.kt @@ -1,10 +1,10 @@ // MODULE: m1-common // FILE: common.kt -expect enum class En { +expect enum class En { E1, E2 { fun foo() = "" }, E3 { }; -} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.fir.kt new file mode 100644 index 00000000000..68cb5fee75f --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.fir.kt @@ -0,0 +1,22 @@ +// MODULE: m1-common +// FILE: common.kt + +interface Foo { + fun foo() +} + +expect class NonAbstractClass : Foo { + abstract fun bar() + + abstract val baz: Int + + abstract override fun foo() +} + +expect abstract class AbstractClass : Foo { + abstract fun bar() + + abstract val baz: Int + + abstract override fun foo() +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.kt index e21846c9734..15555f2e760 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/expectClassWithExplicitAbstractMember.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // MODULE: m1-common // FILE: common.kt diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt index 1984e8b5441..89eb169a7e3 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt @@ -1,13 +1,13 @@ // MODULE: m1-common // FILE: common.kt -expect open class A { +expect open class A { constructor(s: String) constructor(n: Number) : this("A") -} +} -expect class B : A { +expect class B : A { constructor(i: Int) constructor() : super("B") -} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/extendExpectedClassWithAbstractMember.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/extendExpectedClassWithAbstractMember.fir.kt index bee5a07d0f7..bc316e9967c 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/extendExpectedClassWithAbstractMember.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/extendExpectedClassWithAbstractMember.fir.kt @@ -1,10 +1,10 @@ // MODULE: m1-common // FILE: common.kt -expect abstract class BaseA() { +expect abstract class BaseA() { abstract fun foo() -} -expect open class BaseAImpl() : BaseA +} +expect open class BaseAImpl() : BaseA class DerivedA1 : BaseAImpl() class DerivedA2 : BaseAImpl() { @@ -13,10 +13,10 @@ class DerivedA2 : BaseAImpl() { -expect interface BaseB { +expect interface BaseB { fun foo() -} -expect open class BaseBImpl() : BaseB +} +expect open class BaseBImpl() : BaseB class DerivedB1 : BaseBImpl() class DerivedB2 : BaseBImpl() { @@ -25,10 +25,10 @@ class DerivedB2 : BaseBImpl() { -expect interface BaseC { +expect interface BaseC { fun foo() -} -expect abstract class BaseCImpl() : BaseC +} +expect abstract class BaseCImpl() : BaseC class DerivedC1 : BaseCImpl() class DerivedC2 : BaseCImpl() { @@ -37,25 +37,25 @@ class DerivedC2 : BaseCImpl() { -expect interface BaseD { +expect interface BaseD { fun foo() -} +} abstract class BaseDImpl() : BaseD { fun bar() = super.foo() } -expect interface BaseE { +expect interface BaseE { fun foo() -} +} sealed class BaseEImpl() : BaseE { fun bar() = super.foo() } -expect interface BaseF { +expect interface BaseF { fun foo() -} -expect class BaseFImpl() : BaseF +} +expect class BaseFImpl() : BaseF diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.fir.kt index d324bf63af6..d8dec0f6b42 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/headerClassWithFunctionBody.fir.kt @@ -1,7 +1,7 @@ // IGNORE_REVERSED_RESOLVE // MODULE: m1-common // FILE: common.kt -expect class Foo( +expect class Foo( val constructorProperty: String, constructorParameter: String ) { @@ -24,4 +24,4 @@ expect class Foo( fun functionWithBody(x: Int): Int { return x + 1 } -} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/inheritanceByDelegationInExpectClass.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/inheritanceByDelegationInExpectClass.fir.kt index 864bba60d90..87070ad9553 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/inheritanceByDelegationInExpectClass.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/inheritanceByDelegationInExpectClass.fir.kt @@ -4,6 +4,6 @@ interface A class B : A -expect class Foo(b: B) : A by b +expect class Foo(b: B) : A by b -expect class Bar : A by B() +expect class Bar : A by B() diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/memberPropertyKinds.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/memberPropertyKinds.fir.kt index 1c116c0a971..ab50ab3bba6 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/memberPropertyKinds.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/memberPropertyKinds.fir.kt @@ -1,7 +1,7 @@ // MODULE: m1-common // FILE: common.kt -expect class Foo { +expect class Foo { val justVal: String var justVar: String @@ -25,6 +25,6 @@ expect class Foo { lateinit var lateinitVar: String val delegated: String by Delegate -} +} object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.fir.kt new file mode 100644 index 00000000000..7661dd8c085 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.fir.kt @@ -0,0 +1,12 @@ +// MODULE: m1-common +// FILE: common.kt + +expect class Foo { // also, it's important that Foo doesn't override equals + fun foo() +} + +fun check(x1: Foo, x: Any) { + if (x1 == x) { + x.foo() + } +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.kt index 4323c4ff6da..b7d87bf7e16 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/smartCastOnExpectClass.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // MODULE: m1-common // FILE: common.kt diff --git a/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt index 6d6e08c907a..64ab9d14d68 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/incompatibles.fir.kt @@ -1,12 +1,12 @@ -header impl class First +header impl class First -header expect class Second +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/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.fir.kt new file mode 100644 index 00000000000..f87e53ebf27 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.fir.kt @@ -0,0 +1,7 @@ +// MODULE: m1-common +// FILE: common.kt + +expect fun foo() +expect fun foo() + +expect fun foo(x: Int) diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.kt index d2b4e8df486..174d90a0ae6 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/conflictingHeaderDeclarations.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // MODULE: m1-common // FILE: common.kt diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.fir.kt new file mode 100644 index 00000000000..583c8257ae5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.fir.kt @@ -0,0 +1,8 @@ +// MODULE: m1-common +// FILE: common.kt + +expect fun foo() + +expect fun foo() {} + +expect fun bar() {} diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.kt index e39f33493c9..1321694d200 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerDeclarationWithBody.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // MODULE: m1-common // FILE: common.kt diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.fir.kt new file mode 100644 index 00000000000..243664b3dee --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.fir.kt @@ -0,0 +1,4 @@ +// MODULE: m1-common +// FILE: common.kt + +expect fun foo() diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.kt index d6af6ee53f9..a3848aebdfa 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelFun/headerWithoutImpl.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // MODULE: m1-common // FILE: common.kt diff --git a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt index 7b0747618fd..ff63aa648e2 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/topLevelProperty/differentKindsOfProperties.fir.kt @@ -2,35 +2,35 @@ // MODULE: m1-common // FILE: common.kt -expect val justVal: String -expect var justVar: String +expect val justVal: String +expect var justVar: String -expect val String.extensionVal: Unit -expect var T.genericExtensionVar: T +expect val String.extensionVal: Unit +expect var T.genericExtensionVar: T -expect val valWithGet: String - get -expect var varWithGetSet: String - get set +expect val valWithGet: String + get +expect var varWithGetSet: String + get set -expect var varWithPlatformGetSet: String +expect var varWithPlatformGetSet: String expect get - expect set + expect set -expect val backingFieldVal: String = "no" -expect var backingFieldVar: String = "no" +expect val backingFieldVal: String = "no" +expect var backingFieldVar: String = "no" -expect val customAccessorVal: String +expect val customAccessorVal: String + get() = "no" +expect var customAccessorVar: String get() = "no" -expect var customAccessorVar: String - get() = "no" - set(value) {} + set(value) {} -expect const val constVal: Int +expect const val constVal: Int -expect lateinit var lateinitVar: String +expect lateinit var lateinitVar: String -expect val delegated: String by Delegate +expect val delegated: String by Delegate object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" } fun test(): String { 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 8f6dc9c1131..b8446fb3c51 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 @@ -22534,6 +22534,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/multiplatform"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true); } + @Test + @TestMetadata("checkNoActualForExpectInLastModule.kt") + public void testCheckNoActualForExpectInLastModule() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/checkNoActualForExpectInLastModule.kt"); + } + @Test @TestMetadata("expectAbstractToString.kt") public void testExpectAbstractToString() throws Exception {