[FIR] Add hasConstantInitializer field in FirField class
This field is required to be able to analyze Java fields without triggering lazy const evaluation. #KT-59894 #KT-61920
This commit is contained in:
@@ -560,6 +560,10 @@ abstract class FirJavaFacade(
|
||||
javaField.initializerValue?.createConstantIfAny(session)
|
||||
}
|
||||
|
||||
lazyHasConstantInitializer = lazy {
|
||||
javaField.hasConstantNotNullInitializer
|
||||
}
|
||||
|
||||
if (!javaField.isStatic) {
|
||||
dispatchReceiverType = dispatchReceiver
|
||||
}
|
||||
|
||||
@@ -43,12 +43,16 @@ class FirJavaField @FirImplementationDetail constructor(
|
||||
annotationBuilder: () -> List<FirAnnotation>,
|
||||
override val typeParameters: MutableList<FirTypeParameterRef>,
|
||||
lazyInitializer: Lazy<FirExpression?>,
|
||||
lazyHasConstantInitializer: Lazy<Boolean>,
|
||||
override val dispatchReceiverType: ConeSimpleKotlinType?,
|
||||
override val attributes: FirDeclarationAttributes,
|
||||
) : FirField() {
|
||||
internal var lazyInitializer: Lazy<FirExpression?> = lazyInitializer
|
||||
private set
|
||||
|
||||
internal var lazyHasConstantInitializer: Lazy<Boolean> = 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<FirAnnotation>
|
||||
var lazyInitializer: Lazy<FirExpression?>? = null
|
||||
lateinit var lazyHasConstantInitializer: Lazy<Boolean>
|
||||
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
|
||||
@@ -199,6 +207,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
|
||||
annotationBuilder,
|
||||
typeParameters,
|
||||
lazyInitializer ?: lazyOf(initializer),
|
||||
lazyHasConstantInitializer,
|
||||
dispatchReceiverType,
|
||||
attributes,
|
||||
)
|
||||
|
||||
+1
@@ -142,6 +142,7 @@ class FirSignatureEnhancement(
|
||||
status = firElement.status
|
||||
if (firElement is FirJavaField) {
|
||||
lazyInitializer = firElement.lazyInitializer
|
||||
lazyHasConstantInitializer = firElement.lazyHasConstantInitializer
|
||||
} else {
|
||||
initializer = firElement.initializer
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user