[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.
|
* 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
|
package org.jetbrains.kotlin.ir.generator.model
|
||||||
|
|
||||||
import org.jetbrains.kotlin.generators.tree.*
|
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.BASE_PACKAGE
|
||||||
import org.jetbrains.kotlin.ir.generator.IrTree
|
import org.jetbrains.kotlin.ir.generator.IrTree
|
||||||
import org.jetbrains.kotlin.ir.generator.elementBaseType
|
import org.jetbrains.kotlin.ir.generator.elementBaseType
|
||||||
@@ -136,94 +135,4 @@ class Element(
|
|||||||
}
|
}
|
||||||
|
|
||||||
typealias ElementRef = GenericElementRef<Element>
|
typealias ElementRef = GenericElementRef<Element>
|
||||||
typealias ElementOrRef = GenericElementOrRef<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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+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