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 f27391dba1b..f4f815d2f7c 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 @@ -12,10 +12,12 @@ import com.intellij.psi.search.SearchScope import com.intellij.psi.stubs.IStubElementType import com.intellij.psi.stubs.StubElement import org.jetbrains.annotations.NonNls +import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.light.classes.symbol.classes.createInnerClasses import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateFirLightClass @@ -94,6 +96,27 @@ internal abstract class FirLightClassForClassOrObjectSymbol( } } + protected fun addFieldsFromCompanionIfNeeded(result: MutableList) { + classOrObjectSymbol.companionObject?.run { + analyzeWithSymbolAsContext(this) { + getDeclaredMemberScope().getCallableSymbols() + .filterIsInstance() + .filter { it.hasJvmFieldAnnotation() || it.hasJvmStaticAnnotation() || it is KtKotlinPropertySymbol && it.isConst } + .mapTo(result) { + FirLightFieldForPropertySymbol( + propertySymbol = it, + fieldName = it.name.asString(), + containingClass = this@FirLightClassForClassOrObjectSymbol, + lightMemberOrigin = null, + isTopLevel = false, + forceStatic = !it.hasJvmStaticAnnotation(), + takePropertyVisibility = true + ) + } + } + } + } + private val _containingFile: PsiFile? by lazyPub { val kotlinOrigin = kotlinOrigin ?: return@lazyPub null 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 8ca5f4c8b9e..dc4f70613f5 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 @@ -241,27 +241,6 @@ internal open class FirLightClassForSymbol( result } - private fun addFieldsFromCompanionIfNeeded(result: MutableList) { - classOrObjectSymbol.companionObject?.run { - analyzeWithSymbolAsContext(this) { - getDeclaredMemberScope().getCallableSymbols() - .filterIsInstance() - .filter { it.hasJvmFieldAnnotation() || it.hasJvmStaticAnnotation() || it is KtKotlinPropertySymbol && it.isConst } - .mapTo(result) { - FirLightFieldForPropertySymbol( - propertySymbol = it, - fieldName = it.name.asString(), - containingClass = this@FirLightClassForSymbol, - lightMemberOrigin = null, - isTopLevel = false, - forceStatic = !it.hasJvmStaticAnnotation(), - takePropertyVisibility = true - ) - } - } - } - } - private fun addPropertyBackingFields(result: MutableList) { analyzeWithSymbolAsContext(classOrObjectSymbol) { val propertySymbols = classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInterfaceClassSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInterfaceClassSymbol.kt index 78808d4fe65..101eb8682e0 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInterfaceClassSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightInterfaceClassSymbol.kt @@ -31,6 +31,7 @@ internal open class FirLightInterfaceClassSymbol( private val _ownFields: List by lazyPub { mutableListOf().also { addCompanionObjectFieldIfNeeded(it) + addFieldsFromCompanionIfNeeded(it) } } diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/TraitClassObjectField.fir.java b/compiler/testData/asJava/lightClasses/compilationErrors/TraitClassObjectField.fir.java index b1b7944e3da..070e7d42a28 100644 --- a/compiler/testData/asJava/lightClasses/compilationErrors/TraitClassObjectField.fir.java +++ b/compiler/testData/asJava/lightClasses/compilationErrors/TraitClassObjectField.fir.java @@ -2,6 +2,9 @@ public abstract interface TraitClassObjectField /* TraitClassObjectField*/ { @org.jetbrains.annotations.NotNull() public static final TraitClassObjectField.Companion Companion; + @org.jetbrains.annotations.Nullable() + public static final java.lang.String x = "" /* initializer type: java.lang.String */; + public static final class Companion /* TraitClassObjectField.Companion*/ { @org.jetbrains.annotations.Nullable()