FIR LC: correct static modifiers for accessors from companion
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt
index bddbc13..c5ef4a2 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt
@@ -39,6 +39,9 @@
 
     protected val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL
 
+    internal val isCompanionObject: Boolean
+        get() = classOrObjectSymbol.classKind == KtClassKind.COMPANION_OBJECT
+
     private val _isDeprecated: Boolean by lazyPub {
         classOrObjectSymbol.hasDeprecatedAnnotation()
     }
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt
index d1f3434..be368e1 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForSymbol.kt
@@ -112,8 +112,8 @@
                 }
             }
 
-            val suppressStatic = classOrObjectSymbol.isCompanionObject
-            createMethods(visibleDeclarations, result, suppressStaticForMethods = suppressStatic)
+            val suppressStatic = isCompanionObject
+            createMethods(visibleDeclarations, result, suppressStatic = suppressStatic)
 
             createConstructors(declaredMemberScope.getConstructors(), result)
         }
@@ -234,7 +234,7 @@
         analyzeWithSymbolAsContext(classOrObjectSymbol) {
             val propertySymbols = classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
                 .filterIsInstance<KtPropertySymbol>()
-                .applyIf(classOrObjectSymbol.isCompanionObject) {
+                .applyIf(isCompanionObject) {
                     // All fields for companion object of classes are generated to the containing class
                     // For interfaces, only @JvmField-annotated properties are generated to the containing class
                     // Probably, the same should work for const vals but it doesn't at the moment (see KT-28294)
@@ -249,7 +249,7 @@
                 val isLateInit = (propertySymbol as? KtKotlinPropertySymbol)?.isLateInit == true
 
                 val forceStatic = classOrObjectSymbol.isObject
-                val takePropertyVisibility = !classOrObjectSymbol.isCompanionObject && (isLateInit || isJvmField)
+                val takePropertyVisibility = !isCompanionObject && (isLateInit || isJvmField)
 
                 createField(
                     declaration = propertySymbol,
@@ -294,9 +294,6 @@
     private val KtClassOrObjectSymbol.isObject: Boolean
         get() = classKind == KtClassKind.OBJECT
 
-    private val KtClassOrObjectSymbol.isCompanionObject: Boolean
-        get() = classKind == KtClassKind.COMPANION_OBJECT
-
     private val KtClassOrObjectSymbol.isNamedObject: Boolean
         get() = isObject && !isCompanionObject
 
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInlineClass.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInlineClass.kt
index cf73861..d3bd24d 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInlineClass.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInlineClass.kt
@@ -39,7 +39,7 @@
                     it.deprecationStatus?.deprecationLevel == DeprecationLevelValue.HIDDEN
                 }
 
-            createMethods(applicableDeclarations, result, suppressStaticForMethods = false)
+            createMethods(applicableDeclarations, result, suppressStatic = false)
 
             val inlineClassParameterSymbol =
                 declaredMemberScope.getConstructors().singleOrNull { it.isPrimary }?.valueParameters?.singleOrNull()
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt
index e4e0628..2cfc399 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt
@@ -94,10 +94,6 @@
     }
 }
 
-
-
-
-
 private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? {
     if (ktEnumEntry.body == null) return null
 
@@ -185,7 +181,7 @@
     declarations: Sequence<KtCallableSymbol>,
     result: MutableList<KtLightMethod>,
     isTopLevel: Boolean = false,
-    suppressStaticForMethods: Boolean = false
+    suppressStatic : Boolean = false
 ) {
     val declarationGroups = declarations.groupBy { it is KtPropertySymbol && it.isFromPrimaryConstructor }
 
@@ -205,7 +201,7 @@
                         containingClass = this@createMethods,
                         isTopLevel = isTopLevel,
                         methodIndex = methodIndex,
-                        suppressStatic = suppressStaticForMethods
+                        suppressStatic = suppressStatic
                     )
                 )
 
@@ -231,7 +227,12 @@
                     }
                 }
             }
-            is KtPropertySymbol -> createPropertyAccessors(result, declaration, isTopLevel)
+            is KtPropertySymbol -> createPropertyAccessors(
+                result,
+                declaration,
+                isTopLevel = isTopLevel,
+                suppressStatic = suppressStatic
+            )
             is KtConstructorSymbol -> error("Constructors should be handled separately and not passed to this function")
         }
     }
@@ -252,6 +253,7 @@
     isTopLevel: Boolean,
     isMutable: Boolean = !declaration.isVal,
     onlyJvmStatic: Boolean = false,
+    suppressStatic: Boolean = false,
 ) {
     if (declaration is KtKotlinPropertySymbol && declaration.isConst) return
 
@@ -292,7 +294,8 @@
                 containingPropertySymbol = declaration,
                 lightMemberOrigin = lightMemberOrigin,
                 containingClass = this@createPropertyAccessors,
-                isTopLevel = isTopLevel
+                isTopLevel = isTopLevel,
+                suppressStatic = suppressStatic,
             )
         )
     }
@@ -315,7 +318,8 @@
                 containingPropertySymbol = declaration,
                 lightMemberOrigin = lightMemberOrigin,
                 containingClass = this@createPropertyAccessors,
-                isTopLevel = isTopLevel
+                isTopLevel = isTopLevel,
+                suppressStatic = suppressStatic,
             )
         )
     }
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt
index 0bc458a..de67729 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt
@@ -29,6 +29,7 @@
     lightMemberOrigin: LightMemberOrigin?,
     containingClass: FirLightClassBase,
     private val isTopLevel: Boolean,
+    private val suppressStatic: Boolean = false,
 ) : FirLightMethod(
     lightMemberOrigin,
     containingClass,
@@ -115,7 +116,9 @@
         } ?: propertyAccessorSymbol.toPsiVisibilityForMember(isTopLevel)
         modifiers.add(visibility)
 
-        if (containingPropertySymbol.hasJvmStaticAnnotation(accessorSite)) {
+        if (!suppressStatic &&
+            (containingPropertySymbol.hasJvmStaticAnnotation() || propertyAccessorSymbol.hasJvmStaticAnnotation(accessorSite))
+        ) {
             modifiers.add(PsiModifier.STATIC)
         }
 
diff --git a/compiler/testData/asJava/ultraLightClasses/objects.fir.java b/compiler/testData/asJava/ultraLightClasses/objects.fir.java
index 0058a78..728a099 100644
--- a/compiler/testData/asJava/ultraLightClasses/objects.fir.java
+++ b/compiler/testData/asJava/ultraLightClasses/objects.fir.java
@@ -16,11 +16,11 @@
   public static final void foo();//  foo()
 
   @org.jetbrains.annotations.NotNull()
-  public final java.lang.String getX();//  getX()
+  public static final java.lang.String getX();//  getX()
 
   public  C();//  .ctor()
 
-  public final void setX(@org.jetbrains.annotations.NotNull() java.lang.String);//  setX(java.lang.String)
+  public static final void setX(@org.jetbrains.annotations.NotNull() java.lang.String);//  setX(java.lang.String)
 
 
 
@@ -105,11 +105,11 @@
   public static final int zoo();//  zoo()
 
   @org.jetbrains.annotations.NotNull()
-  public final java.lang.String getX();//  getX()
+  public static final java.lang.String getX();//  getX()
 
   private  Obj();//  .ctor()
 
-  public final void setX(@org.jetbrains.annotations.NotNull() java.lang.String);//  setX(java.lang.String)
+  public static final void setX(@org.jetbrains.annotations.NotNull() java.lang.String);//  setX(java.lang.String)
 
   public void run();//  run()