diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt index 7bfbda68d24..972e70fee8d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt @@ -23,10 +23,7 @@ object FirExpectConsistencyChecker : FirBasicDeclarationChecker() { val source = declaration.source ?: return if (source.kind is KtFakeSourceElementKind) return - val isTopLevel = context.containingDeclarations.size == 1 val lastClass = context.containingDeclarations.lastOrNull() as? FirClass - val isTopLevelOrInsideClass = isTopLevel || lastClass != null - if (declaration is FirAnonymousInitializer) { if (lastClass?.isExpect == true) { reporter.reportOn(source, FirErrors.EXPECTED_DECLARATION_WITH_BODY, context) @@ -42,7 +39,7 @@ object FirExpectConsistencyChecker : FirBasicDeclarationChecker() { reporter.reportOn(delegatedConstructor.source, FirErrors.EXPECTED_CLASS_CONSTRUCTOR_DELEGATION_CALL, context) } - if (isProhibitedPrivateDeclaration(declaration, isTopLevelOrInsideClass)) { + if (isProhibitedPrivateDeclaration(declaration)) { reporter.reportOn(source, FirErrors.EXPECTED_PRIVATE_DECLARATION, context) } @@ -64,8 +61,8 @@ object FirExpectConsistencyChecker : FirBasicDeclarationChecker() { return null } - private fun isProhibitedPrivateDeclaration(declaration: FirMemberDeclaration, isTopLevelOrInsideClass: Boolean): Boolean { - return isTopLevelOrInsideClass && declaration !is FirConstructor && Visibilities.isPrivate(declaration.visibility) + private fun isProhibitedPrivateDeclaration(declaration: FirMemberDeclaration): Boolean { + return declaration !is FirConstructor && declaration !is FirPropertyAccessor && Visibilities.isPrivate(declaration.visibility) } private fun isProhibitedDeclarationWithBody(declaration: FirMemberDeclaration): Boolean { diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt index 5ffa533791a..a15edc42525 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt @@ -1,21 +1,27 @@ // MODULE: m1-common // FILE: common.kt -expect class A { +expect class A private constructor() { private fun foo() private val bar: String private fun Int.memExt(): Any private class Nested + + var baz: Any? + private set } // MODULE: m1-jvm()()(m1-common) // FILE: jvm.kt -actual class A { +actual class A actual private constructor() { private fun foo() {} private val bar: String = "" actual private fun Int.memExt(): Any = 0 actual private class Nested + + actual var baz: Any? = null + private set } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.kt index a65a463e451..567ba541dd6 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.kt @@ -1,21 +1,27 @@ // MODULE: m1-common // FILE: common.kt -expect class A { +expect class A private constructor() { private fun foo() private val bar: String private fun Int.memExt(): Any private class Nested + + var baz: Any? + private set } // MODULE: m1-jvm()()(m1-common) // FILE: jvm.kt -actual class A { +actual class A actual private constructor() { private fun foo() {} private val bar: String = "" actual private fun Int.memExt(): Any = 0 actual private class Nested + + actual var baz: Any? = null + private set } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.txt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.txt index 757cf07da64..51e2606cb1b 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.txt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.txt @@ -2,7 +2,9 @@ package public final expect class A { + private constructor A() private expect final val bar: kotlin.String + public expect final var baz: kotlin.Any? public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean private final expect fun foo(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -20,8 +22,9 @@ public final expect class A { package public final actual class A { - public constructor A() + private constructor A() private final val bar: kotlin.String = "" + public actual final var baz: kotlin.Any? public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean private final fun foo(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int