diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 15f1eee1532..3cc1d0d6752 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -418,7 +418,8 @@ class FirElementSerializer private constructor( val isFakeOverrideOfAnyFunctionInDataOrValueClass = this@collectDeclarations is FirRegularClass && (this@collectDeclarations.isData || this@collectDeclarations.isInline) && dispatchReceiverLookupTag?.classId == StandardClassIds.Any && !declaration.isFinal - if (isFakeOverrideOfAnyFunctionInDataOrValueClass || + // Related: https://youtrack.jetbrains.com/issue/KT-20427#focus=Comments-27-8652759.0-0 + if (isFakeOverrideOfAnyFunctionInDataOrValueClass && !this@collectDeclarations.isExpect || !declaration.isSubstitutionOrIntersectionOverride && (declaration.isStatic || declaration is FirConstructor || dispatchReceiverLookupTag == this@collectDeclarations.symbol.toLookupTag()) ) { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt index cde3008a22b..fcf84c88eac 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/FirKotlinScopeProvider.kt @@ -62,6 +62,7 @@ class FirKotlinScopeProvider( FirDelegatedMemberScope(useSiteSession, scopeSession, klass, it, delegateFields) } val declaredMemberScopeWithPossiblySynthesizedMembers = + // Related: https://youtrack.jetbrains.com/issue/KT-20427#focus=Comments-27-8652759.0-0 if (klass is FirRegularClass && !klass.isExpect && (klass.isData || klass.isInline)) { // See also KT-58926 (we apply delegation first, and data/value classes after it) FirClassAnySynthesizedMemberScope(useSiteSession, possiblyDelegatedDeclaredMemberScope, klass, scopeSession) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt index 2906a04574e..859ac60fbd3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppDiagnosticsIt.kt @@ -113,6 +113,13 @@ class MppDiagnosticsIt : KGPBaseTest() { } } + @GradleTest + fun testKt64121(gradleVersion: GradleVersion) { + project("kt64121", gradleVersion) { + build("assemble") + } + } + @GradleTest fun testSuppressGradlePluginWarnings(gradleVersion: GradleVersion) { project("suppressGradlePluginWarnings", gradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/build.gradle.kts new file mode 100644 index 00000000000..e50d0039bdb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/build.gradle.kts @@ -0,0 +1,47 @@ +plugins { + kotlin("multiplatform") + `maven-publish` +} + +repositories { + mavenLocal() + maven("../repo") + mavenCentral() +} + +group = "com.example.bar" +version = "1.0" + +kotlin { + js() + linuxX64() + + sourceSets { + val commonMain by getting { + dependencies { + implementation(kotlin("stdlib-common")) + } + } + + val linuxAndJsMain by creating { + dependsOn(commonMain) + } + + js().compilations["main"].defaultSourceSet { + dependsOn(linuxAndJsMain) + dependencies { + implementation(kotlin("stdlib-js")) + } + } + + linuxX64().compilations["main"].defaultSourceSet { + dependsOn(linuxAndJsMain) + } + } +} + +publishing { + repositories { + maven("../repo") + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/settings.gradle.kts new file mode 100644 index 00000000000..2bbb87dde93 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "my-lib-bar" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/src/commonMain/kotlin/Bar.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/src/commonMain/kotlin/Bar.kt new file mode 100644 index 00000000000..a3b10021d8d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/src/commonMain/kotlin/Bar.kt @@ -0,0 +1,7 @@ +package com.example.bar + +expect value class Bar(val value: String) + +expect value class Foo(val value: String) { + override fun toString(): String +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/src/linuxAndJsMain/kotlin/BarLinuxAndJs.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/src/linuxAndJsMain/kotlin/BarLinuxAndJs.kt new file mode 100644 index 00000000000..02b73f1bace --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt64121/src/linuxAndJsMain/kotlin/BarLinuxAndJs.kt @@ -0,0 +1,13 @@ +package com.example.bar + +actual value class Bar actual constructor(actual val value: String){ + override fun toString(): String { + return value + } +} + +actual value class Foo actual constructor(actual val value: String){ + actual override fun toString(): String { + return value + } +}