[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 setter: CirPropertySetter?
val backingFieldAnnotations: List<CirAnnotation> val backingFieldAnnotations: List<CirAnnotation>
val delegateFieldAnnotations: List<CirAnnotation> val delegateFieldAnnotations: List<CirAnnotation>
val compileTimeInitializer: CirConstantValue<*>? val compileTimeInitializer: CirConstantValue<*>
} }
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.descriptors.commonizer.cir.factory package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PropertyDescriptor 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.*
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertyImpl import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirPropertyImpl
import org.jetbrains.kotlin.descriptors.commonizer.utils.compactMap import org.jetbrains.kotlin.descriptors.commonizer.utils.compactMap
@@ -20,7 +20,7 @@ object CirPropertyFactory {
constantValue = constantValue, constantValue = constantValue,
owner = source, owner = source,
) )
} } ?: CirConstantValue.NullValue
return create( return create(
annotations = source.annotations.compactMap(CirAnnotationFactory::create), annotations = source.annotations.compactMap(CirAnnotationFactory::create),
@@ -65,7 +65,7 @@ object CirPropertyFactory {
setter: CirPropertySetter?, setter: CirPropertySetter?,
backingFieldAnnotations: List<CirAnnotation>, backingFieldAnnotations: List<CirAnnotation>,
delegateFieldAnnotations: List<CirAnnotation>, delegateFieldAnnotations: List<CirAnnotation>,
compileTimeInitializer: CirConstantValue<*>? compileTimeInitializer: CirConstantValue<*>
): CirProperty { ): CirProperty {
return CirPropertyImpl( return CirPropertyImpl(
annotations = annotations, annotations = annotations,
@@ -29,7 +29,7 @@ data class CirPropertyImpl(
override val setter: CirPropertySetter?, override val setter: CirPropertySetter?,
override val backingFieldAnnotations: List<CirAnnotation>, override val backingFieldAnnotations: List<CirAnnotation>,
override val delegateFieldAnnotations: List<CirAnnotation>, override val delegateFieldAnnotations: List<CirAnnotation>,
override val compileTimeInitializer: CirConstantValue<*>? override val compileTimeInitializer: CirConstantValue<*>
) : CirProperty { ) : CirProperty {
// const property in "common" fragment is already lifted up // const property in "common" fragment is already lifted up
override val isLiftedUp get() = isConst override val isLiftedUp get() = isConst
@@ -47,7 +47,7 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP
setter = setter, setter = setter,
backingFieldAnnotations = emptyList(), backingFieldAnnotations = emptyList(),
delegateFieldAnnotations = emptyList(), delegateFieldAnnotations = emptyList(),
compileTimeInitializer = constCompileTimeInitializer compileTimeInitializer = constCompileTimeInitializer ?: CirConstantValue.NullValue
) )
} }
@@ -55,7 +55,7 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP
super.initialize(first) super.initialize(first)
constCommonizationState = if (first.isConst) { constCommonizationState = if (first.isConst) {
first.compileTimeInitializer?.let(::ConstSameValue) ?: NonConst first.compileTimeInitializer.takeIf { it != CirConstantValue.NullValue }?.let(::ConstSameValue) ?: NonConst
} else { } else {
NonConst NonConst
} }
@@ -105,11 +105,17 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP
private sealed class ConstCommonizationState { private sealed class ConstCommonizationState {
object NonConst : ConstCommonizationState() object NonConst : ConstCommonizationState()
abstract class Const : ConstCommonizationState() { abstract class Const : ConstCommonizationState() {
val properties: MutableList<CirProperty> = mutableListOf() 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() { class ConstMultipleValues(previous: ConstSameValue) : Const() {
init { init {
properties += previous.properties properties += previous.properties