[IR generator] Better support for fields' default value in base classes
- Allows using those with the incoming IR implementation printer. - Moves the logic to common tree generator, so other trees can specify default values in base classes as well, if needed. ^KT-65773 In Progress
This commit is contained in:
committed by
Space Team
parent
288351d733
commit
4d9d1974ec
@@ -587,6 +587,16 @@ object IrTree : AbstractTreeBuilder() {
|
||||
+field("isConst", boolean)
|
||||
+field("isLateinit", boolean)
|
||||
+field("initializer", expression, nullable = true)
|
||||
+field("isAssignable", boolean, mutable = false) {
|
||||
defaultValueInBase = "true"
|
||||
withGetter = true
|
||||
additionalImports.add(setValue)
|
||||
kDoc = """
|
||||
Variables are assignable by default. This means that they can be used in [${setValue.typeName}].
|
||||
Variables are assigned in the IR even though they are not 'var' in the input. Hence
|
||||
the separate assignability flag.
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
val packageFragment: Element by element(Declaration) {
|
||||
ownsChildren = false
|
||||
@@ -608,8 +618,9 @@ object IrTree : AbstractTreeBuilder() {
|
||||
}
|
||||
+field("packageFqName", type<FqName>())
|
||||
+field("fqName", type<FqName>()) {
|
||||
baseGetter = "packageFqName"
|
||||
defaultValueInBase = "packageFqName"
|
||||
customSetter = "packageFqName = value"
|
||||
withGetter = true
|
||||
deprecation = Deprecated(
|
||||
"Please use `packageFqName` instead",
|
||||
ReplaceWith("packageFqName"),
|
||||
|
||||
+9
-11
@@ -12,8 +12,6 @@ sealed class Field(
|
||||
override val name: String,
|
||||
override var isMutable: Boolean,
|
||||
) : AbstractField<Field>(), AbstractFieldWithDefaultValue<Field> {
|
||||
var baseGetter: String? = null
|
||||
|
||||
sealed class UseFieldAsParameterInIrFactoryStrategy {
|
||||
|
||||
data object No : UseFieldAsParameterInIrFactoryStrategy()
|
||||
@@ -31,28 +29,26 @@ sealed class Field(
|
||||
UseFieldAsParameterInIrFactoryStrategy.Yes(null)
|
||||
}
|
||||
|
||||
override var withGetter: Boolean
|
||||
get() = baseGetter != null
|
||||
set(value) = error("Operation not supported")
|
||||
|
||||
override var defaultValueInImplementation: String? by ::baseGetter
|
||||
override var withGetter: Boolean = false
|
||||
|
||||
override var defaultValueInBase: String? = null
|
||||
override var defaultValueInImplementation: String? = null
|
||||
override var defaultValueInBuilder: String?
|
||||
get() = null
|
||||
set(_) = error("Builders are not supported")
|
||||
|
||||
override var customSetter: String? = null
|
||||
|
||||
override val origin: Field
|
||||
get() = this
|
||||
|
||||
override var customSetter: String? = null
|
||||
|
||||
override fun toString() = "$name: $typeRef"
|
||||
|
||||
override val isVolatile: Boolean
|
||||
get() = false
|
||||
|
||||
override val isFinal: Boolean
|
||||
get() = baseGetter != null
|
||||
override var isFinal: Boolean = false
|
||||
|
||||
override val isParameter: Boolean
|
||||
get() = false
|
||||
@@ -61,7 +57,9 @@ sealed class Field(
|
||||
|
||||
override fun updateFieldsInCopy(copy: Field) {
|
||||
super.updateFieldsInCopy(copy)
|
||||
copy.baseGetter = baseGetter
|
||||
copy.withGetter = withGetter
|
||||
copy.defaultValueInBase = defaultValueInBase
|
||||
copy.defaultValueInImplementation = defaultValueInImplementation
|
||||
copy.customUseInIrFactoryStrategy = customUseInIrFactoryStrategy
|
||||
copy.customSetter = customSetter
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user