[AA] render expect/actual modifiers

^KT-66052 fixed
diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleRendererTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleRendererTestGenerated.java
index 5a09847..59f51dc 100644
--- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleRendererTestGenerated.java
+++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/symbolDeclarationRenderer/Fe10IdeNormalAnalysisSourceModuleRendererTestGenerated.java
@@ -42,6 +42,12 @@
   }
 
   @Test
+  @TestMetadata("actualInheritance.kt")
+  public void testActualInheritance() {
+    runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt");
+  }
+
+  @Test
   public void testAllFilesPresentInRenderDeclaration() {
     KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration"), Pattern.compile("^(.+)\\.kt$"), null, true);
   }
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleRendererTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleRendererTestGenerated.java
index 6d72443..a424820 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleRendererTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeDependentAnalysisSourceModuleRendererTestGenerated.java
@@ -42,6 +42,12 @@
   }
 
   @Test
+  @TestMetadata("actualInheritance.kt")
+  public void testActualInheritance() {
+    runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt");
+  }
+
+  @Test
   public void testAllFilesPresentInRenderDeclaration() {
     KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration"), Pattern.compile("^(.+)\\.kt$"), null, true);
   }
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleRendererTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleRendererTestGenerated.java
index 4ca323d..564aad7 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleRendererTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirIdeNormalAnalysisSourceModuleRendererTestGenerated.java
@@ -42,6 +42,12 @@
   }
 
   @Test
+  @TestMetadata("actualInheritance.kt")
+  public void testActualInheritance() {
+    runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt");
+  }
+
+  @Test
   public void testAllFilesPresentInRenderDeclaration() {
     KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration"), Pattern.compile("^(.+)\\.kt$"), null, true);
   }
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleRendererTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleRendererTestGenerated.java
index 540e728..6f5655c 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleRendererTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/symbolDeclarationRenderer/FirStandaloneNormalAnalysisSourceModuleRendererTestGenerated.java
@@ -42,6 +42,12 @@
   }
 
   @Test
+  @TestMetadata("actualInheritance.kt")
+  public void testActualInheritance() {
+    runTest("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt");
+  }
+
+  @Test
   public void testAllFilesPresentInRenderDeclaration() {
     KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration"), Pattern.compile("^(.+)\\.kt$"), null, true);
   }
diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KtRendererOtherModifiersProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KtRendererOtherModifiersProvider.kt
index 8b57a8a..d3d4464 100644
--- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KtRendererOtherModifiersProvider.kt
+++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KtRendererOtherModifiersProvider.kt
@@ -7,6 +7,7 @@
 
 import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
 import org.jetbrains.kotlin.analysis.api.symbols.*
+import org.jetbrains.kotlin.analysis.api.symbols.markers.KtPossibleMultiplatformSymbol
 import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
 import org.jetbrains.kotlin.lexer.KtTokens
 import org.jetbrains.kotlin.types.Variance
@@ -42,6 +43,11 @@
     public object ALL : KtRendererOtherModifiersProvider {
         context(KtAnalysisSession)
         override fun getOtherModifiers(symbol: KtDeclarationSymbol): List<KtModifierKeywordToken> = buildList {
+            if (symbol is KtPossibleMultiplatformSymbol) {
+                if (symbol.isActual) add(KtTokens.ACTUAL_KEYWORD)
+                if (symbol.isExpect) add(KtTokens.EXPECT_KEYWORD)
+            }
+
             if (symbol is KtFunctionSymbol) {
                 if (symbol.isExternal) add(KtTokens.EXTERNAL_KEYWORD)
                 if (symbol.isOverride) add(KtTokens.OVERRIDE_KEYWORD)
diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.txt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.txt
index 00d2a58..21c876f 100644
--- a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.txt
+++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_object.txt
@@ -1,2 +1,2 @@
 expected symbols:
-Common.kt : object Platform
+Common.kt : expect object Platform
diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt
index 30279a4..6fa3695 100644
--- a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt
+++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/actual_primaryConstructor.txt
@@ -1,2 +1,2 @@
 expected symbols:
-Common.kt : constructor(n: kotlin.Int)
+Common.kt : expect constructor(n: kotlin.Int)
diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/matchingButIncompatibleExpect.txt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/matchingButIncompatibleExpect.txt
index bf80a6d..54d2928 100644
--- a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/matchingButIncompatibleExpect.txt
+++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/matchingButIncompatibleExpect.txt
@@ -1,2 +1,2 @@
 expected symbols:
-Common.kt : fun foo()
+Common.kt : expect fun foo()
diff --git a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/multipleExpects.txt b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/multipleExpects.txt
index bd7843e6c..6fabea6 100644
--- a/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/multipleExpects.txt
+++ b/analysis/analysis-api/testData/components/multiplatformInfoProvider/expectForActual/multipleExpects.txt
@@ -1,3 +1,3 @@
 expected symbols:
-Common1.kt : fun foo()
-Common2.kt : fun foo()
+Common1.kt : expect fun foo()
+Common2.kt : expect fun foo()
diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt
new file mode 100644
index 0000000..eb01f1c
--- /dev/null
+++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.kt
@@ -0,0 +1,13 @@
+expect abstract class A {
+    abstract fun foo()
+}
+
+abstract actual class A {
+    abstract actual fun foo()
+}
+
+class Bar: A() {
+    override fun foo() {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.rendered b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.rendered
new file mode 100644
index 0000000..791faa6
--- /dev/null
+++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/actualInheritance.rendered
@@ -0,0 +1,11 @@
+expect abstract class A {
+  expect abstract fun foo()
+}
+
+actual abstract class A {
+  actual abstract fun foo()
+}
+
+class Bar : A() {
+  override fun foo()
+}
diff --git a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/expectActual.rendered b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/expectActual.rendered
index 7359050..ccbc09f 100644
--- a/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/expectActual.rendered
+++ b/analysis/analysis-api/testData/components/symbolDeclarationRenderer/renderDeclaration/expectActual.rendered
@@ -1,12 +1,12 @@
-class MyClass
+expect class MyClass
 
-fun foo(): String
+expect fun foo(): String
 
-val x: Int
+expect val x: Int
 
-class MyClass
+actual class MyClass
 
-fun foo(): String
+actual fun foo(): String
 
-val x: Int
+actual val x: Int
 
diff --git a/analysis/analysis-api/testData/symbols/multiModuleSymbolByPsi/expectActual.pretty.txt b/analysis/analysis-api/testData/symbols/multiModuleSymbolByPsi/expectActual.pretty.txt
index 3345c5c..42e9e65 100644
--- a/analysis/analysis-api/testData/symbols/multiModuleSymbolByPsi/expectActual.pretty.txt
+++ b/analysis/analysis-api/testData/symbols/multiModuleSymbolByPsi/expectActual.pretty.txt
@@ -1,49 +1,50 @@
 // FILE: Common.kt
 
-object A
+expect object A
 
-class B(s: kotlin.String)
+expect class Bexpect constructor(s: kotlin.String)
 
-    constructor(s: kotlin.String)
+    expect constructor(s: kotlin.String)
 
-    constructor(n: kotlin.Int)
+    expect constructor(n: kotlin.Int)
 
-    class Nested
+    expect class Nested
 
-    fun bar()
+    expect fun bar()
 
-    val n: kotlin.Int
+    expect val n: kotlin.Int
 
-class C
+expect class C
 
-    class Nested
+    expect class Nested
 
-fun baz()
+expect fun baz()
 
-var m: kotlin.Int
+expect var m: kotlin.Int
 
 // FILE: JvmAndroid.kt
 
-object A
+actual object A
 
-class B(s: kotlin.String)
+actual class Bactual constructor(s: kotlin.String)
 
-    constructor(s: kotlin.String)
+    actual constructor(s: kotlin.String)
 
-    constructor(n: kotlin.Int)
+    actual constructor(n: kotlin.Int)
 
-    class Nested
+    actual class Nested
 
-    fun bar()
+    actual fun bar()
 
-    val n: kotlin.Int
+    actual val n: kotlin.Int
 
-typealias C = sample.D
+actual typealias C = sample.D
 
 class D
 
     class Nested
 
-fun baz()
+actual fun baz()
 
-var m: kotlin.Int
+actual var m: kotlin.Int
+