diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 1e007e23f72..22a716e5477 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -21004,6 +21004,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt"); } + @Test + @TestMetadata("kt54827.kt") + public void testKt54827() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/kt54827.kt"); + } + @Test @TestMetadata("modifierApplicability.kt") public void testModifierApplicability() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 3d7a7b15e31..eb3a3a835d4 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -21004,6 +21004,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt"); } + @Test + @TestMetadata("kt54827.kt") + public void testKt54827() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/kt54827.kt"); + } + @Test @TestMetadata("modifierApplicability.kt") public void testModifierApplicability() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index e0f73ece593..877b0256463 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -21004,6 +21004,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt"); } + @Test + @TestMetadata("kt54827.kt") + public void testKt54827() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/kt54827.kt"); + } + @Test @TestMetadata("modifierApplicability.kt") public void testModifierApplicability() throws Exception { diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt index 081fbf92c61..59ca9440d4c 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/multiplatform/ExpectedActualResolver.kt @@ -80,9 +80,10 @@ object ExpectedActualResolver { if (container is ClassDescriptor) { val expectedClass = declaration.containingDeclaration as ClassDescriptor // TODO: this might not work for members of inner generic classes - Substitutor(expectedClass.declaredTypeParameters, container.declaredTypeParameters) - } - else null + if (expectedClass.declaredTypeParameters.size == container.declaredTypeParameters.size) { + Substitutor(expectedClass.declaredTypeParameters, container.declaredTypeParameters) + } else null + } else null areCompatibleCallables(declaration, actual, parentSubstitutor = substitutor) } } diff --git a/compiler/testData/diagnostics/tests/multiplatform/kt54827.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/kt54827.fir.kt new file mode 100644 index 00000000000..015fdeb55c7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/kt54827.fir.kt @@ -0,0 +1,11 @@ +// MODULE: m1-common +// FILE: common.kt +expect class SomeClass { + fun foo() +} + +// MODULE: m1-jvm()()(m1-common) +// FILE: jvm.kt +actual class SomeClass { + actual fun foo() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/kt54827.kt b/compiler/testData/diagnostics/tests/multiplatform/kt54827.kt new file mode 100644 index 00000000000..66e0d6dc770 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/kt54827.kt @@ -0,0 +1,11 @@ +// MODULE: m1-common +// FILE: common.kt +expect class SomeClass { + fun foo() +} + +// MODULE: m1-jvm()()(m1-common) +// FILE: jvm.kt +actual class SomeClass { + actual fun foo() {} +} diff --git a/compiler/testData/diagnostics/tests/multiplatform/kt54827.txt b/compiler/testData/diagnostics/tests/multiplatform/kt54827.txt new file mode 100644 index 00000000000..34b5607dfb6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/kt54827.txt @@ -0,0 +1,21 @@ +// -- Module: -- +package + +public final expect class SomeClass { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final expect fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +// -- Module: -- +package + +public final actual class SomeClass { + public constructor SomeClass() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final actual fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.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 55e8da7e0bb..bc8022d9598 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 @@ -21010,6 +21010,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt"); } + @Test + @TestMetadata("kt54827.kt") + public void testKt54827() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/kt54827.kt"); + } + @Test @TestMetadata("modifierApplicability.kt") public void testModifierApplicability() throws Exception {