diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index fa6c7b8cc86..3b479d33d1e 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -66,10 +66,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() delegateCall = "shortName()" withGetter = true } - - default("delegate") { - isChild = false - } } fun ImplementationContext.commonAnnotationConfig() { @@ -87,16 +83,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(annotationCall) { commonAnnotationConfig() - default("argumentMapping") { - isChild = false - } } impl(errorAnnotationCall) { commonAnnotationConfig() - default("argumentMapping") { - isChild = false - } default("annotationResolvePhase") { value = "FirAnnotationResolvePhase.Types" } @@ -512,9 +502,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(resolvedTypeRef) { publicImplementation() - default("delegatedTypeRef") { - isChild = false - } } impl(errorExpression) { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 71040677e32..5ad2643cf97 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -528,7 +528,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } resolvedImport.configure { - +field("delegate", import) + +field("delegate", import, isChild = false) +field("packageFqName", fqNameType) +field("relativeParentClassName", fqNameType, nullable = true) +field("resolvedParentClassId", classIdType, nullable = true) @@ -547,7 +547,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } annotationCall.configure { - +field("argumentMapping", annotationArgumentMapping, withReplace = true) + +field("argumentMapping", annotationArgumentMapping, withReplace = true, isChild = false) +field("annotationResolvePhase", annotationResolvePhaseType, withReplace = true) +field("containingDeclarationSymbol", firBasedSymbolType.withArgs(TypeRef.Star)).apply { withBindThis = false @@ -555,7 +555,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } errorAnnotationCall.configure { - +field("argumentMapping", annotationArgumentMapping, withReplace = true) + +field("argumentMapping", annotationArgumentMapping, withReplace = true, isChild = false) } annotationArgumentMapping.configure { @@ -721,7 +721,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild resolvedTypeRef.configure { +field("type", coneKotlinTypeType) - +field("delegatedTypeRef", typeRef, nullable = true) + +field("delegatedTypeRef", typeRef, nullable = true, isChild = false) element.otherParents.add(typeRefMarkerType) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt index 1b2e186ca8c..3f10078b590 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt @@ -10,11 +10,11 @@ import org.jetbrains.kotlin.generators.tree.* // ----------- Simple field ----------- fun field(name: String, type: TypeRefWithNullability, nullable: Boolean = false, withReplace: Boolean = false): Field { - return SimpleField(name, type.copy(nullable), withReplace) + return SimpleField(name, type.copy(nullable), withReplace = withReplace) } fun field(type: ClassRef<*>, nullable: Boolean = false, withReplace: Boolean = false): Field { - return SimpleField(type.simpleName.replaceFirstChar(Char::lowercaseChar), type.copy(nullable), withReplace) + return SimpleField(type.simpleName.replaceFirstChar(Char::lowercaseChar), type.copy(nullable), withReplace = withReplace) } fun booleanField(name: String, withReplace: Boolean = false): Field { @@ -31,22 +31,23 @@ fun intField(name: String, withReplace: Boolean = false): Field { // ----------- Fir field ----------- -fun field(name: String, element: ElementOrRef, nullable: Boolean = false, withReplace: Boolean = false): Field { - return FirField(name, element.copy(nullable), withReplace) +fun field(name: String, element: ElementOrRef, nullable: Boolean = false, withReplace: Boolean = false, isChild: Boolean = true): Field { + return FirField(name, element.copy(nullable), withReplace = withReplace, isChild = isChild) } -fun field(element: Element, nullable: Boolean = false, withReplace: Boolean = false): Field { - return FirField(element.name.replaceFirstChar(Char::lowercaseChar), element.copy(nullable), withReplace) +fun field(element: Element, nullable: Boolean = false, withReplace: Boolean = false, isChild: Boolean = true): Field { + return FirField(element.name.replaceFirstChar(Char::lowercaseChar), element.copy(nullable), withReplace = withReplace, isChild = isChild) } // ----------- Field list ----------- -fun fieldList(name: String, type: TypeRef, withReplace: Boolean = false, useMutableOrEmpty: Boolean = false): Field { - return FieldList(name, type, withReplace, useMutableOrEmpty) +fun fieldList(name: String, type: TypeRef, withReplace: Boolean = false, useMutableOrEmpty: Boolean = false, isChild: Boolean = true): Field { + return FieldList(name, type, withReplace = withReplace, isChild = isChild, useMutableOrEmpty = useMutableOrEmpty) } -fun fieldList(elementOrRef: ElementOrRef, withReplace: Boolean = false, useMutableOrEmpty: Boolean = false): Field { - return FieldList(elementOrRef.element.name.replaceFirstChar(Char::lowercaseChar) + "s", elementOrRef, withReplace, useMutableOrEmpty) +fun fieldList(elementOrRef: ElementOrRef, withReplace: Boolean = false, useMutableOrEmpty: Boolean = false, isChild: Boolean = true): Field { + val name = elementOrRef.element.name.replaceFirstChar(Char::lowercaseChar) + "s" + return FieldList(name, elementOrRef, withReplace = withReplace, isChild = isChild, useMutableOrEmpty = useMutableOrEmpty) } // ----------- Field set ----------- diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt index b4718d60576..312392e5ea1 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt @@ -71,6 +71,8 @@ class FieldWithDefault(override val origin: Field) : Field(), AbstractFieldWithD override var withReplace: Boolean get() = origin.withReplace set(_) {} + override val isChild: Boolean + get() = origin.isChild override val containsElement: Boolean get() = origin.containsElement override var needsSeparateTransform: Boolean @@ -127,7 +129,6 @@ class FieldWithDefault(override val origin: Field) : Field(), AbstractFieldWithD it.isMutable = isMutable it.withGetter = withGetter it.fromDelegate = fromDelegate - it.isChild = isChild } } } @@ -143,6 +144,9 @@ class SimpleField( ) : Field() { override var isMutable: Boolean = withReplace + override val isChild: Boolean + get() = false + override fun internalCopy(): Field { return SimpleField( name = name, @@ -175,6 +179,7 @@ class FirField( override val name: String, val element: ElementRef, override var withReplace: Boolean, + override val isChild: Boolean, ) : Field() { override val typeRef: ElementRef @@ -190,7 +195,8 @@ class FirField( return FirField( name, element, - withReplace + withReplace, + isChild, ).apply { withBindThis = this@FirField.withBindThis } @@ -203,7 +209,8 @@ class FieldList( override val name: String, override val baseType: TypeRef, override var withReplace: Boolean, - useMutableOrEmpty: Boolean = false + override val isChild: Boolean, + useMutableOrEmpty: Boolean = false, ) : Field(), ListField { override var defaultValueInImplementation: String? = null @@ -225,6 +232,7 @@ class FieldList( name, baseType, withReplace, + isChild, isMutableOrEmptyList ) } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt index b10fc179b6b..ac9d7c3e94c 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/config/AbstractTreeBuilder.kt @@ -78,8 +78,7 @@ abstract class AbstractTreeBuilder { isChild: Boolean = true, initializer: SingleField.() -> Unit = {} ): SingleField { - return SingleField(name, type.copy(nullable), mutable).apply { - this.isChild = isChild + return SingleField(name, type.copy(nullable), mutable, isChild).apply { initializer() } } @@ -103,8 +102,8 @@ abstract class AbstractTreeBuilder { listType = listType, isNullable = nullable, mutable = mutability == ListField.Mutability.Var, + isChild = isChild, ).apply(initializer).apply { - this.isChild = isChild initializer() } } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt index 5968fcc0d15..5075119a2db 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Field.kt @@ -73,12 +73,13 @@ class SingleField( name: String, override var typeRef: TypeRefWithNullability, mutable: Boolean, + override val isChild: Boolean, ) : Field(name, mutable) { override fun replaceType(newType: TypeRefWithNullability) = - SingleField(name, newType, isMutable).also(::updateFieldsInCopy) + SingleField(name, newType, isMutable, isChild).also(::updateFieldsInCopy) - override fun internalCopy() = SingleField(name, typeRef, isMutable) + override fun internalCopy() = SingleField(name, typeRef, isMutable, isChild) } class ListField( @@ -87,6 +88,7 @@ class ListField( private val isNullable: Boolean, override val listType: ClassRef, mutable: Boolean, + override val isChild: Boolean, ) : Field(name, mutable), AbstractListField { override val typeRef: ClassRef @@ -94,7 +96,7 @@ class ListField( override fun replaceType(newType: TypeRefWithNullability) = copy() - override fun internalCopy() = ListField(name, baseType, isNullable, listType, isMutable) + override fun internalCopy() = ListField(name, baseType, isNullable, listType, isMutable, isChild) enum class Mutability { Var, diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt index 5fd68715f8b..e9e76613fee 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt @@ -64,7 +64,7 @@ abstract class AbstractField> { * * Only has effect if [containsElement] is `true`. */ - var isChild: Boolean = true + abstract val isChild: Boolean open val overriddenTypes: MutableSet = mutableSetOf() @@ -106,7 +106,6 @@ abstract class AbstractField> { copy.visibility = visibility copy.fromParent = fromParent copy.useInBaseTransformerDetection = useInBaseTransformerDetection - copy.isChild = isChild copy.overriddenTypes += overriddenTypes } } diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/config/AbstractImplementationConfigurator.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/config/AbstractImplementationConfigurator.kt index a9727198200..9e8d0edd241 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/config/AbstractImplementationConfigurator.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/config/AbstractImplementationConfigurator.kt @@ -368,19 +368,10 @@ abstract class AbstractImplementationConfigurator field.defaultValueInImplementation = value diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilder.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilder.kt index 2af3671cc56..328d9f0bf9e 100644 --- a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilder.kt +++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilder.kt @@ -61,8 +61,7 @@ abstract class AbstractSwiftIrTreeBuilder { isChild: Boolean = true, initializer: SimpleField.() -> Unit = {} ): SimpleField { - return SimpleField(name, type.copy(nullable), mutable).apply { - this.isChild = isChild + return SimpleField(name, type.copy(nullable), mutable, isChild).apply { initializer() } } @@ -77,8 +76,8 @@ abstract class AbstractSwiftIrTreeBuilder { name = name, baseType = baseType, isMutable = false, + isChild = isChild, ).apply { - this.isChild = isChild initializer() } } diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Field.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Field.kt index 8eab45d2eb0..0471f85b09d 100644 --- a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Field.kt +++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Field.kt @@ -49,17 +49,19 @@ class SimpleField( name: String, override val typeRef: TypeRefWithNullability, isMutable: Boolean, + override val isChild: Boolean, ) : Field(name, isMutable) { - override fun internalCopy() = SimpleField(name, typeRef, isMutable) + override fun internalCopy() = SimpleField(name, typeRef, isMutable, isChild) - override fun replaceType(newType: TypeRefWithNullability) = SimpleField(name, newType, isMutable).also(::updateFieldsInCopy) + override fun replaceType(newType: TypeRefWithNullability) = SimpleField(name, newType, isMutable, isChild).also(::updateFieldsInCopy) } class ListField( name: String, override val baseType: TypeRef, isMutable: Boolean, + override val isChild: Boolean, ) : Field(name, isMutable), ListField { override val typeRef: ClassRef @@ -68,7 +70,7 @@ class ListField( override val listType: ClassRef get() = StandardTypes.list - override fun internalCopy() = ListField(name, baseType, isMutable) + override fun internalCopy() = ListField(name, baseType, isMutable, isChild) override fun replaceType(newType: TypeRefWithNullability) = internalCopy().also(::updateFieldsInCopy) }