[IR generator] Minor: split Model.kt into Element.kt and Field.kt

^KT-65773 In Progress
This commit is contained in:
Wojciech Litewka
2024-02-05 20:24:23 +01:00
committed by Space Team
parent fbd8c79c1b
commit 5921706a15
2 changed files with 101 additions and 93 deletions
@@ -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<Element>
typealias ElementOrRef = GenericElementOrRef<Element>
sealed class Field(
override val name: String,
override var isMutable: Boolean,
) : AbstractField<Field>() {
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<PositionTypeParameterRef>,
mutable: Boolean,
) : Field(name, mutable), AbstractListField {
override val typeRef: ClassRef<PositionTypeParameterRef>
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<Element>
@@ -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<Field>() {
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<PositionTypeParameterRef>,
mutable: Boolean,
) : Field(name, mutable), AbstractListField {
override val typeRef: ClassRef<PositionTypeParameterRef>
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
}
}