Implement ACTUAL_PRIVATE_DECLARATION. todo motivation

Motivation:
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt
index 209c780..6412ec3 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt
@@ -3684,6 +3684,12 @@
             token,
         )
     }
+    add(FirErrors.ACTUAL_PRIVATE_DECLARATION) { firDiagnostic ->
+        ActualPrivateDeclarationImpl(
+            firDiagnostic as KtPsiDiagnostic,
+            token,
+        )
+    }
     add(FirErrors.EXPECTED_EXTERNAL_DECLARATION) { firDiagnostic ->
         ExpectedExternalDeclarationImpl(
             firDiagnostic as KtPsiDiagnostic,
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt
index 26e78ae..d0f918c 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt
@@ -2587,6 +2587,10 @@
         override val diagnosticClass get() = ExpectedPrivateDeclaration::class
     }
 
+    interface ActualPrivateDeclaration : KtFirDiagnostic<KtModifierListOwner> {
+        override val diagnosticClass get() = ActualPrivateDeclaration::class
+    }
+
     interface ExpectedExternalDeclaration : KtFirDiagnostic<KtModifierListOwner> {
         override val diagnosticClass get() = ExpectedExternalDeclaration::class
     }
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt
index 3384d15..abd1e49 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt
@@ -3116,6 +3116,11 @@
     token: KtLifetimeToken,
 ) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.ExpectedPrivateDeclaration
 
+internal class ActualPrivateDeclarationImpl(
+    firDiagnostic: KtPsiDiagnostic,
+    token: KtLifetimeToken,
+) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.ActualPrivateDeclaration
+
 internal class ExpectedExternalDeclarationImpl(
     firDiagnostic: KtPsiDiagnostic,
     token: KtLifetimeToken,
diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
index 94e59b4..6d7530a 100644
--- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
+++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
@@ -1260,6 +1260,7 @@
         val EXPECTED_LATEINIT_PROPERTY by error<KtModifierListOwner>(PositioningStrategy.LATEINIT_MODIFIER)
         val SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS by error<KtElement>(PositioningStrategy.SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS_DIAGNOSTIC)
         val EXPECTED_PRIVATE_DECLARATION by error<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER)
+        val ACTUAL_PRIVATE_DECLARATION by error<KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER)
         val EXPECTED_EXTERNAL_DECLARATION by error<KtModifierListOwner>(PositioningStrategy.EXTERNAL_MODIFIER)
         val EXPECTED_TAILREC_FUNCTION by error<KtModifierListOwner>(PositioningStrategy.TAILREC_MODIFIER)
         val IMPLEMENTATION_BY_DELEGATION_IN_EXPECT_CLASS by error<KtDelegatedSuperTypeEntry>()
diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
index 55ce585..02a37f2 100644
--- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
+++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
@@ -665,6 +665,7 @@
     val EXPECTED_LATEINIT_PROPERTY: KtDiagnosticFactory0 by error0<KtModifierListOwner>(SourceElementPositioningStrategies.LATEINIT_MODIFIER)
     val SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS: KtDiagnosticFactory0 by error0<KtElement>(SourceElementPositioningStrategies.SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS_DIAGNOSTIC)
     val EXPECTED_PRIVATE_DECLARATION: KtDiagnosticFactory0 by error0<KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
+    val ACTUAL_PRIVATE_DECLARATION: KtDiagnosticFactory0 by error0<KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
     val EXPECTED_EXTERNAL_DECLARATION: KtDiagnosticFactory0 by error0<KtModifierListOwner>(SourceElementPositioningStrategies.EXTERNAL_MODIFIER)
     val EXPECTED_TAILREC_FUNCTION: KtDiagnosticFactory0 by error0<KtModifierListOwner>(SourceElementPositioningStrategies.TAILREC_MODIFIER)
     val IMPLEMENTATION_BY_DELEGATION_IN_EXPECT_CLASS: KtDiagnosticFactory0 by error0<KtDelegatedSuperTypeEntry>()
diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt
index 88f4bd8..b5be25f 100644
--- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt
+++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt
@@ -449,6 +449,7 @@
     "EXPECTED_LATEINIT_PROPERTY",
     "SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS",
     "EXPECTED_PRIVATE_DECLARATION",
+    "ACTUAL_PRIVATE_DECLARATION",
     "EXPECTED_EXTERNAL_DECLARATION",
     "EXPECTED_TAILREC_FUNCTION",
     "IMPLEMENTATION_BY_DELEGATION_IN_EXPECT_CLASS",
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt
index 316ca79..1b9ad9d 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualDeclarationChecker.kt
@@ -67,6 +67,9 @@
         ) {
             checkExpectActualPair(declaration, context, reporter, matchingCompatibilityToMembersMap)
         }
+        if (declaration.hasActualModifier() && isProhibitedPrivateExpectOrActualDeclaration(declaration)) {
+            reporter.reportOn(declaration.source, FirErrors.ACTUAL_PRIVATE_DECLARATION, context)
+        }
     }
 
     private fun containsExpectOrActualModifier(declaration: FirMemberDeclaration): Boolean {
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 b5e29be..55f123d 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
@@ -61,7 +61,7 @@
             reporter.reportOn(source, FirErrors.SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS, context)
         }
 
-        if (isProhibitedPrivateDeclaration(declaration)) {
+        if (isProhibitedPrivateExpectOrActualDeclaration(declaration)) {
             reporter.reportOn(source, FirErrors.EXPECTED_PRIVATE_DECLARATION, context)
         }
 
@@ -102,10 +102,6 @@
         }
     }
 
-    private fun isProhibitedPrivateDeclaration(declaration: FirMemberDeclaration): Boolean {
-        return declaration !is FirConstructor && declaration !is FirPropertyAccessor && Visibilities.isPrivate(declaration.visibility)
-    }
-
     private fun isProhibitedEnumConstructor(declaration: FirMemberDeclaration, lastClass: FirClass?): Boolean {
         return declaration is FirConstructor && lastClass?.classKind == ClassKind.ENUM_CLASS
     }
@@ -122,3 +118,7 @@
         return declaration is FirEnumEntry && declaration.withNavigator { declaration.hasInitializer() == true }
     }
 }
+
+internal fun isProhibitedPrivateExpectOrActualDeclaration(declaration: FirMemberDeclaration): Boolean {
+    return declaration !is FirConstructor && declaration !is FirPropertyAccessor && Visibilities.isPrivate(declaration.visibility)
+}
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt
index f8fed1c..d14b57f 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt
@@ -65,6 +65,7 @@
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_MISSING
+import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_PRIVATE_DECLARATION
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_TYPEALIAS_TO_SPECIAL_ANNOTATION
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_TYPE_ALIAS_NOT_TO_CLASS
 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE
@@ -2012,6 +2013,7 @@
         map.put(EXPECTED_DELEGATED_PROPERTY, "Expected property cannot be delegated.")
         map.put(EXPECTED_LATEINIT_PROPERTY, "Expected property cannot be 'lateinit'.")
         map.put(EXPECTED_PRIVATE_DECLARATION, "Expected declaration cannot be private.")
+        map.put(ACTUAL_PRIVATE_DECLARATION, "Actual declaration cannot be private.")
         map.put(EXPECTED_EXTERNAL_DECLARATION, "Expected declaration cannot be external.")
         map.put(EXPECTED_TAILREC_FUNCTION, "Expected function cannot have 'tailrec' modifier.")
         map.put(SUPERTYPE_INITIALIZED_IN_EXPECTED_CLASS, "Expected classes cannot initialize supertypes.")
diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt
index b8434a6..9bc8770 100644
--- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt
+++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/privateMembers.fir.kt
@@ -18,9 +18,9 @@
 actual class A actual private constructor() {
     private fun <!ACTUAL_MISSING!>foo<!>() {}
     private val <!ACTUAL_MISSING!>bar<!>: String = ""
-    actual private fun Int.memExt(): Any = 0
+    actual <!ACTUAL_PRIVATE_DECLARATION!>private<!> fun Int.memExt(): Any = 0
 
-    actual private class Nested
+    actual <!ACTUAL_PRIVATE_DECLARATION!>private<!> class Nested
 
     actual var baz: Any? = null
         private set
diff --git a/compiler/testData/diagnostics/tests/multiplatform/privateTopLevelDeclarations.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/privateTopLevelDeclarations.fir.kt
index d24fde7..5db5189 100644
--- a/compiler/testData/diagnostics/tests/multiplatform/privateTopLevelDeclarations.fir.kt
+++ b/compiler/testData/diagnostics/tests/multiplatform/privateTopLevelDeclarations.fir.kt
@@ -10,8 +10,8 @@
 // MODULE: m2-jvm()()(m1-common)
 // FILE: jvm.kt
 
-private actual fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {}
-private actual val <!ACTUAL_WITHOUT_EXPECT!>bar<!>: String = ""
-private actual fun Int.<!ACTUAL_WITHOUT_EXPECT!>memExt<!>(): Any = 0
+<!ACTUAL_PRIVATE_DECLARATION!>private<!> actual fun <!ACTUAL_WITHOUT_EXPECT!>foo<!>() {}
+<!ACTUAL_PRIVATE_DECLARATION!>private<!> actual val <!ACTUAL_WITHOUT_EXPECT!>bar<!>: String = ""
+<!ACTUAL_PRIVATE_DECLARATION!>private<!> actual fun Int.<!ACTUAL_WITHOUT_EXPECT!>memExt<!>(): Any = 0
 
-private actual class Foo
+<!ACTUAL_PRIVATE_DECLARATION!>private<!> actual class Foo