From 5921706a15039c40e2b22c1824799bf124445c08 Mon Sep 17 00:00:00 2001 From: Wojciech Litewka Date: Mon, 5 Feb 2024 20:24:23 +0100 Subject: [PATCH] [IR generator] Minor: split Model.kt into Element.kt and Field.kt ^KT-65773 In Progress --- .../generator/model/{Model.kt => Element.kt} | 95 +----------------- .../kotlin/ir/generator/model/Field.kt | 99 +++++++++++++++++++ 2 files changed, 101 insertions(+), 93 deletions(-) rename compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/{Model.kt => Element.kt} (63%) create mode 100644 compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Element.kt similarity index 63% rename from compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt rename to compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Element.kt index b55aa1c74f4..eb949ff4d06 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Element.kt @@ -1,12 +1,11 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.ir.generator.model import org.jetbrains.kotlin.generators.tree.* -import org.jetbrains.kotlin.generators.tree.ListField as AbstractListField import org.jetbrains.kotlin.ir.generator.BASE_PACKAGE import org.jetbrains.kotlin.ir.generator.IrTree import org.jetbrains.kotlin.ir.generator.elementBaseType @@ -136,94 +135,4 @@ class Element( } typealias ElementRef = GenericElementRef -typealias ElementOrRef = GenericElementOrRef - -sealed class Field( - override val name: String, - override var isMutable: Boolean, -) : AbstractField() { - var baseDefaultValue: String? = null - var baseGetter: String? = null - - sealed class UseFieldAsParameterInIrFactoryStrategy { - - data object No : UseFieldAsParameterInIrFactoryStrategy() - - data class Yes(val defaultValue: String?) : UseFieldAsParameterInIrFactoryStrategy() - } - - var customUseInIrFactoryStrategy: UseFieldAsParameterInIrFactoryStrategy? = null - - val useInIrFactoryStrategy: UseFieldAsParameterInIrFactoryStrategy - get() = customUseInIrFactoryStrategy - ?: if (isChild && containsElement) { - UseFieldAsParameterInIrFactoryStrategy.No - } else { - UseFieldAsParameterInIrFactoryStrategy.Yes(null) - } - - override val withGetter: Boolean - get() = baseGetter != null - - override val defaultValueInImplementation: String? - get() = baseGetter ?: baseDefaultValue - - override var customSetter: String? = null - - override fun toString() = "$name: $typeRef" - - override val isVolatile: Boolean - get() = false - - override val isFinal: Boolean - get() = defaultValueInImplementation != null - - override val isParameter: Boolean - get() = false - - override fun copy() = internalCopy().also(::updateFieldsInCopy) - - override fun updateFieldsInCopy(copy: Field) { - super.updateFieldsInCopy(copy) - copy.baseDefaultValue = baseDefaultValue - copy.baseGetter = baseGetter - copy.customUseInIrFactoryStrategy = customUseInIrFactoryStrategy - copy.customSetter = customSetter - } - - protected abstract fun internalCopy(): Field -} - -class SingleField( - name: String, - override var typeRef: TypeRefWithNullability, - mutable: Boolean, -) : Field(name, mutable) { - - override fun replaceType(newType: TypeRefWithNullability) = - SingleField(name, newType, isMutable).also(::updateFieldsInCopy) - - override fun internalCopy() = SingleField(name, typeRef, isMutable) -} - -class ListField( - name: String, - override var baseType: TypeRef, - private val isNullable: Boolean, - override val listType: ClassRef, - mutable: Boolean, -) : Field(name, mutable), AbstractListField { - - override val typeRef: ClassRef - get() = listType.withArgs(baseType).copy(isNullable) - - override fun replaceType(newType: TypeRefWithNullability) = copy() - - override fun internalCopy() = ListField(name, baseType, isNullable, listType, isMutable) - - enum class Mutability { - Var, - MutableList, - Array - } -} +typealias ElementOrRef = GenericElementOrRef \ No newline at end of file diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt new file mode 100644 index 00000000000..94df8742f43 --- /dev/null +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt @@ -0,0 +1,99 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ir.generator.model + +import org.jetbrains.kotlin.generators.tree.* +import org.jetbrains.kotlin.generators.tree.ListField as AbstractListField + +sealed class Field( + override val name: String, + override var isMutable: Boolean, +) : AbstractField() { + var baseDefaultValue: String? = null + var baseGetter: String? = null + + sealed class UseFieldAsParameterInIrFactoryStrategy { + + data object No : UseFieldAsParameterInIrFactoryStrategy() + + data class Yes(val defaultValue: String?) : UseFieldAsParameterInIrFactoryStrategy() + } + + var customUseInIrFactoryStrategy: UseFieldAsParameterInIrFactoryStrategy? = null + + val useInIrFactoryStrategy: UseFieldAsParameterInIrFactoryStrategy + get() = customUseInIrFactoryStrategy + ?: if (isChild && containsElement) { + UseFieldAsParameterInIrFactoryStrategy.No + } else { + UseFieldAsParameterInIrFactoryStrategy.Yes(null) + } + + override val withGetter: Boolean + get() = baseGetter != null + + override val defaultValueInImplementation: String? + get() = baseGetter ?: baseDefaultValue + + override var customSetter: String? = null + + override fun toString() = "$name: $typeRef" + + override val isVolatile: Boolean + get() = false + + override val isFinal: Boolean + get() = defaultValueInImplementation != null + + override val isParameter: Boolean + get() = false + + override fun copy() = internalCopy().also(::updateFieldsInCopy) + + override fun updateFieldsInCopy(copy: Field) { + super.updateFieldsInCopy(copy) + copy.baseDefaultValue = baseDefaultValue + copy.baseGetter = baseGetter + copy.customUseInIrFactoryStrategy = customUseInIrFactoryStrategy + copy.customSetter = customSetter + } + + protected abstract fun internalCopy(): Field +} + +class SingleField( + name: String, + override var typeRef: TypeRefWithNullability, + mutable: Boolean, +) : Field(name, mutable) { + + override fun replaceType(newType: TypeRefWithNullability) = + SingleField(name, newType, isMutable).also(::updateFieldsInCopy) + + override fun internalCopy() = SingleField(name, typeRef, isMutable) +} + +class ListField( + name: String, + override var baseType: TypeRef, + private val isNullable: Boolean, + override val listType: ClassRef, + mutable: Boolean, +) : Field(name, mutable), AbstractListField { + + override val typeRef: ClassRef + get() = listType.withArgs(baseType).copy(isNullable) + + override fun replaceType(newType: TypeRefWithNullability) = copy() + + override fun internalCopy() = ListField(name, baseType, isNullable, listType, isMutable) + + enum class Mutability { + Var, + MutableList, + Array + } +}