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()