diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt index c0c5a1521fa..00d27e4b12b 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt @@ -560,6 +560,10 @@ abstract class FirJavaFacade( javaField.initializerValue?.createConstantIfAny(session) } + lazyHasConstantInitializer = lazy { + javaField.hasConstantNotNullInitializer + } + if (!javaField.isStatic) { dispatchReceiverType = dispatchReceiver } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt index 8346ba87736..8d05bb2b06d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt @@ -43,12 +43,16 @@ class FirJavaField @FirImplementationDetail constructor( annotationBuilder: () -> List, override val typeParameters: MutableList, lazyInitializer: Lazy, + lazyHasConstantInitializer: Lazy, override val dispatchReceiverType: ConeSimpleKotlinType?, override val attributes: FirDeclarationAttributes, ) : FirField() { internal var lazyInitializer: Lazy = lazyInitializer private set + internal var lazyHasConstantInitializer: Lazy = lazyHasConstantInitializer + private set + init { symbol.bind(this) @@ -68,6 +72,9 @@ class FirJavaField @FirImplementationDetail constructor( override val initializer: FirExpression? get() = lazyInitializer.value + override val hasConstantInitializer: Boolean + get() = lazyHasConstantInitializer.value + override val deprecationsProvider: DeprecationsProvider by lazy { annotations.getDeprecationsProviderFromAnnotations(moduleData.session, fromJava = true) } @@ -181,6 +188,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() { var isFromSource: Boolean by Delegates.notNull() lateinit var annotationBuilder: () -> List var lazyInitializer: Lazy? = null + lateinit var lazyHasConstantInitializer: Lazy override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES @@ -199,6 +207,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() { annotationBuilder, typeParameters, lazyInitializer ?: lazyOf(initializer), + lazyHasConstantInitializer, dispatchReceiverType, attributes, ) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index 488407fd8e8..747316e0ff0 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -142,6 +142,7 @@ class FirSignatureEnhancement( status = firElement.status if (firElement is FirJavaField) { lazyInitializer = firElement.lazyInitializer + lazyHasConstantInitializer = firElement.lazyHasConstantInitializer } else { initializer = firElement.initializer } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirField.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirField.kt index e8b16a47317..23effb1d239 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirField.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirField.kt @@ -49,6 +49,7 @@ abstract class FirField : FirVariable(), FirControlFlowGraphOwner { abstract override val annotations: List abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract override val symbol: FirFieldSymbol + abstract val hasConstantInitializer: Boolean override fun accept(visitor: FirVisitor, data: D): R = visitor.visitField(this, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFieldImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFieldImpl.kt index 4ccaf1da261..8194cff45ec 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFieldImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFieldImpl.kt @@ -60,6 +60,8 @@ class FirFieldImpl @FirImplementationDetail constructor( override val setter: FirPropertyAccessor? get() = null override var controlFlowGraphReference: FirControlFlowGraphReference? = null + override val hasConstantInitializer: Boolean + get() = status.isConst init { symbol.bind(this) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt index 60fd72ec588..cda061db893 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt @@ -96,6 +96,9 @@ open class FirFieldSymbol(callableId: CallableId) : FirVariableSymbol( val hasInitializer: Boolean get() = fir.initializer != null + val hasConstantInitializer: Boolean + get() = fir.hasConstantInitializer + val isVal: Boolean get() = fir.isVal diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index 5d23e97de0e..62bcd263288 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -314,6 +314,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() value = "!isVar" withGetter = true } + default("hasConstantInitializer") { + value = "status.isConst" + withGetter = true + } publicImplementation() defaultNull("receiverParameter", "delegate", "getter", "setter", withGetter = true) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 631ce71bc9f..287eda92ae0 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -468,6 +468,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild field.configure { +symbol("FirFieldSymbol") + generateBooleanFields("hasConstantInitializer") } anonymousInitializer.configure {