From 20f55ef0b75944f50c879c8d91b44834ce273105 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Thu, 1 Jul 2021 15:25:56 +0200 Subject: [PATCH] [Commonizer] Commonize 'const val' and 'val' properties --- .../kotlin/commonizer/cir/CirProperty.kt | 2 +- .../commonizer/core/PropertyCommonizer.kt | 24 ++++--------------- .../core/TypeAliasTypeCommonizer.kt | 2 +- .../commonized/common/package_root.kt | 2 ++ ...hicalClassAndTypeAliasCommonizationTest.kt | 10 ++++---- 5 files changed, 14 insertions(+), 26 deletions(-) diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirProperty.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirProperty.kt index ec694c0dff6..788c51eeb34 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirProperty.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cir/CirProperty.kt @@ -13,7 +13,7 @@ interface CirProperty : CirFunctionOrProperty, CirLiftedUpDeclaration { val isExternal: Boolean val isVar: Boolean val isLateInit: Boolean - var isConst: Boolean + val isConst: Boolean val isDelegate: Boolean val getter: CirPropertyGetter? val setter: CirPropertySetter? diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/PropertyCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/PropertyCommonizer.kt index e18b0176370..6f1fbb889b8 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/PropertyCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/PropertyCommonizer.kt @@ -22,11 +22,6 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP val constCommonizationState = constCommonizationState val constCompileTimeInitializer = (constCommonizationState as? ConstSameValue)?.compileTimeInitializer - if (constCommonizationState is ConstMultipleValues) { - // fix all commonized properties to make then non-const - constCommonizationState.properties.forEach { it.isConst = false } - } - return CirProperty.create( annotations = emptyList(), name = name, @@ -73,23 +68,20 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP when (constCommonizationState) { NonConst -> { // previous property was not constant - return false + this.constCommonizationState = NonConst } is Const -> { - // previous property was constant - constCommonizationState.properties += next - if (constCommonizationState is ConstSameValue) { if (constCommonizationState.compileTimeInitializer != next.compileTimeInitializer) { // const properties have different constants - this.constCommonizationState = ConstMultipleValues(constCommonizationState) + this.constCommonizationState = ConstMultipleValues() } } } } } else if (constCommonizationState != NonConst) { // previous property was constant but this one is not - return false + this.constCommonizationState = NonConst } val result = super.doCommonizeWith(next) @@ -105,9 +97,7 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP private sealed class ConstCommonizationState { object NonConst : ConstCommonizationState() - abstract class Const : ConstCommonizationState() { - val properties: MutableList = mutableListOf() - } + abstract class Const : ConstCommonizationState() class ConstSameValue(val compileTimeInitializer: CirConstantValue) : Const() { init { @@ -115,10 +105,6 @@ class PropertyCommonizer(classifiers: CirKnownClassifiers) : AbstractFunctionOrP } } - class ConstMultipleValues(previous: ConstSameValue) : Const() { - init { - properties += previous.properties - } - } + class ConstMultipleValues : Const() } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasTypeCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasTypeCommonizer.kt index 660f56be4e8..2be5e1c7da3 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasTypeCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/core/TypeAliasTypeCommonizer.kt @@ -63,7 +63,7 @@ internal class TypeAliasTypeCommonizer(private val classifiers: CirKnownClassifi override fun build(typeAliasId: CirEntityId, arguments: List, isMarkedNullable: Boolean) = CirClassType.createInterned( classId = typeAliasId, - outerType = null, // there can't be outer type // TODO NOW!!! + outerType = null, // there can't be outer type visibility = commonClass.visibility, arguments = arguments, isMarkedNullable = isMarkedNullable diff --git a/native/commonizer/testData/propertyCommonization/liftingUpConst/commonized/common/package_root.kt b/native/commonizer/testData/propertyCommonization/liftingUpConst/commonized/common/package_root.kt index 8d8236f1f09..b9348eef0b0 100644 --- a/native/commonizer/testData/propertyCommonization/liftingUpConst/commonized/common/package_root.kt +++ b/native/commonizer/testData/propertyCommonization/liftingUpConst/commonized/common/package_root.kt @@ -1,4 +1,6 @@ const val property1 = 42 +expect val property2: Int +expect val property3: Int expect val property4: Int const val property5: Byte = 42 diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassAndTypeAliasCommonizationTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassAndTypeAliasCommonizationTest.kt index 237bdaf72ce..650603df551 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassAndTypeAliasCommonizationTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/HierarchicalClassAndTypeAliasCommonizationTest.kt @@ -557,7 +557,7 @@ class HierarchicalClassAndTypeAliasCommonizationTest : AbstractInlineSourcesComm "a", """ typealias Proxy = Long typealias X = Proxy - val x: X + const val x: X = 42L """.trimIndent() ) @@ -565,7 +565,7 @@ class HierarchicalClassAndTypeAliasCommonizationTest : AbstractInlineSourcesComm "b", """ typealias Proxy = Long typealias X = Proxy - val x: X + const val x: X = 42L """.trimIndent() ) @@ -573,7 +573,7 @@ class HierarchicalClassAndTypeAliasCommonizationTest : AbstractInlineSourcesComm "c", """ typealias Proxy = Int typealias X = Proxy - val x: X + const val x: X = 42 """.trimIndent() ) @@ -581,7 +581,7 @@ class HierarchicalClassAndTypeAliasCommonizationTest : AbstractInlineSourcesComm "d", """ typealias Proxy = Short typealias X = Proxy - val x: X + const val x: X = 42 """.trimIndent() ) } @@ -590,7 +590,7 @@ class HierarchicalClassAndTypeAliasCommonizationTest : AbstractInlineSourcesComm "(a, b)", """ typealias Proxy = Long typealias X = Proxy - expect val x: X + const val x: X = 42L """.trimIndent() )