[Commonizer] Make CirProperty.compileTimeInitializer non-nullable

There is effectively no difference between null and CirConstantValue.NullValue recorded in compileTimeInitializer.
This commit is contained in:
Dmitriy Dolovov
2021-02-20 00:08:46 +03:00
parent b3e68d3704
commit fa2b2c8735
4 changed files with 14 additions and 8 deletions
@@ -15,5 +15,5 @@ interface CirProperty : CirFunctionOrProperty, CirLiftedUpDeclaration {
val setter: CirPropertySetter?
val backingFieldAnnotations: List<CirAnnotation>
val delegateFieldAnnotations: List<CirAnnotation>
val compileTimeInitializer: CirConstantValue<*>?
val compileTimeInitializer: CirConstantValue<*>
}
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.commonizer.cir.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertyImpl
import org.jetbrains.kotlin.descriptors.commonizer.utils.compactMap
@@ -20,7 +20,7 @@ object CirPropertyFactory {
constantValue = constantValue,
owner = source,
)
}
} ?: CirConstantValue.NullValue
return create(
annotations = source.annotations.compactMap(CirAnnotationFactory::create),
@@ -65,7 +65,7 @@ object CirPropertyFactory {
setter: CirPropertySetter?,
backingFieldAnnotations: List<CirAnnotation>,
delegateFieldAnnotations: List<CirAnnotation>,
compileTimeInitializer: CirConstantValue<*>?
compileTimeInitializer: CirConstantValue<*>
): CirProperty {
return CirPropertyImpl(
annotations = annotations,
@@ -29,7 +29,7 @@ data class CirPropertyImpl(
override val setter: CirPropertySetter?,
override val backingFieldAnnotations: List<CirAnnotation>,
override val delegateFieldAnnotations: List<CirAnnotation>,
override val compileTimeInitializer: CirConstantValue<*>?
override val compileTimeInitializer: CirConstantValue<*>
) : CirProperty {
// const property in "common" fragment is already lifted up
override val isLiftedUp get() = isConst
@@ -47,7 +47,7 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP
setter = setter,
backingFieldAnnotations = emptyList(),
delegateFieldAnnotations = emptyList(),
compileTimeInitializer = constCompileTimeInitializer
compileTimeInitializer = constCompileTimeInitializer ?: CirConstantValue.NullValue
)
}
@@ -55,7 +55,7 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP
super.initialize(first)
constCommonizationState = if (first.isConst) {
first.compileTimeInitializer?.let(::ConstSameValue) ?: NonConst
first.compileTimeInitializer.takeIf { it != CirConstantValue.NullValue }?.let(::ConstSameValue) ?: NonConst
} else {
NonConst
}
@@ -105,11 +105,17 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP
private sealed class ConstCommonizationState {
object NonConst : ConstCommonizationState()
abstract class Const : ConstCommonizationState() {
val properties: MutableList<CirProperty> = mutableListOf()
}
class ConstSameValue(val compileTimeInitializer: CirConstantValue<*>) : Const()
class ConstSameValue(val compileTimeInitializer: CirConstantValue<*>) : Const() {
init {
check(compileTimeInitializer != CirConstantValue.NullValue)
}
}
class ConstMultipleValues(previous: ConstSameValue) : Const() {
init {
properties += previous.properties