[IR] Push default values from base to implementation classes
The default value of those properties is a detail that should be handled by implementation or builder layer. This change will also simplify auto-generating and reasoning about generated implementation classes, and allow for potential further enhancements like intercepting all mutations. ^KT-65773 In Progress
This commit is contained in:
committed by
Space Team
parent
5921706a15
commit
83bc12949b
@@ -443,7 +443,6 @@ object IrTree : AbstractTreeBuilder() {
|
||||
fieldsToSkipInIrFactoryMethod.add("origin")
|
||||
|
||||
+field("symbol", symbolType, mutable = false) {
|
||||
baseGetter = "error(\"Should never be called\")"
|
||||
skipInIrFactory()
|
||||
}
|
||||
}
|
||||
@@ -495,13 +494,6 @@ object IrTree : AbstractTreeBuilder() {
|
||||
+field("name", type<Name>(), mutable = false)
|
||||
+field("irBuiltins", type(Packages.tree, "IrBuiltIns"), mutable = false)
|
||||
+listField("files", file, mutability = MutableList)
|
||||
additionalImports += ArbitraryImportable(Packages.tree, "UNDEFINED_OFFSET")
|
||||
+field("startOffset", int, mutable = false) {
|
||||
baseGetter = "UNDEFINED_OFFSET"
|
||||
}
|
||||
+field("endOffset", int, mutable = false) {
|
||||
baseGetter = "UNDEFINED_OFFSET"
|
||||
}
|
||||
}
|
||||
val property: Element by element(Declaration) {
|
||||
isLeaf = true
|
||||
@@ -678,14 +670,6 @@ object IrTree : AbstractTreeBuilder() {
|
||||
parent(varargElement)
|
||||
parent(attributeContainer)
|
||||
|
||||
+field("attributeOwnerId", attributeContainer, isChild = false) {
|
||||
baseDefaultValue = "this"
|
||||
skipInIrFactory()
|
||||
}
|
||||
+field("originalBeforeInline", attributeContainer, nullable = true, isChild = false) {
|
||||
baseDefaultValue = "null"
|
||||
skipInIrFactory()
|
||||
}
|
||||
+field("type", irTypeType)
|
||||
}
|
||||
val statementContainer: Element by element(Expression) {
|
||||
@@ -733,12 +717,8 @@ object IrTree : AbstractTreeBuilder() {
|
||||
|
||||
parent(declarationReference)
|
||||
|
||||
+field("dispatchReceiver", expression, nullable = true) {
|
||||
baseDefaultValue = "null"
|
||||
}
|
||||
+field("extensionReceiver", expression, nullable = true) {
|
||||
baseDefaultValue = "null"
|
||||
}
|
||||
+field("dispatchReceiver", expression, nullable = true)
|
||||
+field("extensionReceiver", expression, nullable = true)
|
||||
+symbol(s)
|
||||
+field("origin", statementOriginType, nullable = true)
|
||||
+listField("valueArguments", expression.copy(nullable = true), mutability = Array) {
|
||||
@@ -862,9 +842,6 @@ object IrTree : AbstractTreeBuilder() {
|
||||
parent(statementContainer)
|
||||
|
||||
+field("origin", statementOriginType, nullable = true)
|
||||
+listField("statements", statement, mutability = MutableList) {
|
||||
baseDefaultValue = "ArrayList(2)"
|
||||
}
|
||||
}
|
||||
val block: Element by element(Expression) {
|
||||
needAcceptMethod()
|
||||
@@ -902,9 +879,7 @@ object IrTree : AbstractTreeBuilder() {
|
||||
parent(expression)
|
||||
|
||||
+field("loop", loop, isChild = false)
|
||||
+field("label", string, nullable = true) {
|
||||
baseDefaultValue = "null"
|
||||
}
|
||||
+field("label", string, nullable = true)
|
||||
}
|
||||
val `break` by element(Expression) {
|
||||
visitorParameterName = "jump"
|
||||
@@ -1051,9 +1026,7 @@ object IrTree : AbstractTreeBuilder() {
|
||||
|
||||
+symbol(fieldSymbolType, mutable = true)
|
||||
+field("superQualifierSymbol", classSymbolType, nullable = true)
|
||||
+field("receiver", expression, nullable = true) {
|
||||
baseDefaultValue = "null"
|
||||
}
|
||||
+field("receiver", expression, nullable = true)
|
||||
+field("origin", statementOriginType, nullable = true)
|
||||
}
|
||||
val getField: Element by element(Expression) {
|
||||
@@ -1089,13 +1062,9 @@ object IrTree : AbstractTreeBuilder() {
|
||||
parent(expression)
|
||||
|
||||
+field("origin", statementOriginType, nullable = true)
|
||||
+field("body", expression, nullable = true) {
|
||||
baseDefaultValue = "null"
|
||||
}
|
||||
+field("body", expression, nullable = true)
|
||||
+field("condition", expression)
|
||||
+field("label", string, nullable = true) {
|
||||
baseDefaultValue = "null"
|
||||
}
|
||||
+field("label", string, nullable = true)
|
||||
}
|
||||
val whileLoop: Element by element(Expression) {
|
||||
visitorParameterName = "loop"
|
||||
|
||||
+12
-7
@@ -11,8 +11,7 @@ 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
|
||||
) : AbstractField<Field>(), AbstractFieldWithDefaultValue<Field> {
|
||||
var baseGetter: String? = null
|
||||
|
||||
sealed class UseFieldAsParameterInIrFactoryStrategy {
|
||||
@@ -32,11 +31,18 @@ sealed class Field(
|
||||
UseFieldAsParameterInIrFactoryStrategy.Yes(null)
|
||||
}
|
||||
|
||||
override val withGetter: Boolean
|
||||
override var withGetter: Boolean
|
||||
get() = baseGetter != null
|
||||
set(value) = error("Operation not supported")
|
||||
|
||||
override val defaultValueInImplementation: String?
|
||||
get() = baseGetter ?: baseDefaultValue
|
||||
override var defaultValueInImplementation: String? by ::baseGetter
|
||||
|
||||
override var defaultValueInBuilder: String?
|
||||
get() = null
|
||||
set(_) = error("Builders are not supported")
|
||||
|
||||
override val origin: Field
|
||||
get() = this
|
||||
|
||||
override var customSetter: String? = null
|
||||
|
||||
@@ -46,7 +52,7 @@ sealed class Field(
|
||||
get() = false
|
||||
|
||||
override val isFinal: Boolean
|
||||
get() = defaultValueInImplementation != null
|
||||
get() = baseGetter != null
|
||||
|
||||
override val isParameter: Boolean
|
||||
get() = false
|
||||
@@ -55,7 +61,6 @@ sealed class Field(
|
||||
|
||||
override fun updateFieldsInCopy(copy: Field) {
|
||||
super.updateFieldsInCopy(copy)
|
||||
copy.baseDefaultValue = baseDefaultValue
|
||||
copy.baseGetter = baseGetter
|
||||
copy.customUseInIrFactoryStrategy = customUseInIrFactoryStrategy
|
||||
copy.customSetter = customSetter
|
||||
|
||||
Reference in New Issue
Block a user