[IR generator] Minor: split Model.kt into Element.kt and Field.kt
^KT-65773 In Progress
This commit is contained in:
committed by
Space Team
parent
fbd8c79c1b
commit
5921706a15
+2
-93
@@ -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>
|
||||
+99
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user