Regen + copy builders
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt
new file mode 100644
index 0000000..dcbaabf
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.callable]
+ */
+sealed interface SirCallable : SirDeclaration {
+    override val origin: SirOrigin
+    override val visibility: SirVisibility
+    override var parent: SirDeclarationParent
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitCallable(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformCallable(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt
new file mode 100644
index 0000000..827f4f6
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.declaration]
+ */
+sealed interface SirDeclaration : SirElement {
+    val origin: SirOrigin
+    val visibility: SirVisibility
+    var parent: SirDeclarationParent
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitDeclaration(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformDeclaration(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclarationContainer.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclarationContainer.kt
new file mode 100644
index 0000000..f68788e
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclarationContainer.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.declarationContainer]
+ */
+sealed class SirDeclarationContainer : SirDeclarationParent() {
+    abstract val declarations: List<SirDeclaration>
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitDeclarationContainer(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformDeclarationContainer(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclarationParent.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclarationParent.kt
new file mode 100644
index 0000000..ee21cb0
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclarationParent.kt
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.declarationParent]
+ */
+sealed class SirDeclarationParent : SirElementBase(), SirElement
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirElement.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirElement.kt
new file mode 100644
index 0000000..0031c89
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirElement.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * The root interface of the Swift IR tree.
+ *
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.rootElement]
+ */
+sealed interface SirElement {
+    /**
+     * Runs the provided [visitor] on the Swift IR subtree with the root at this node.
+     *
+     * @param visitor The visitor to accept.
+     * @param data An arbitrary context to pass to each invocation of [visitor]'s methods.
+     * @return The value returned by the topmost `visit*` invocation.
+     */
+    fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R
+
+    /**
+     * Runs the provided [transformer] on the Swift IR subtree with the root at this node.
+     *
+     * @param transformer The transformer to use.
+     * @param data An arbitrary context to pass to each invocation of [transformer]'s methods.
+     * @return The transformed node.
+     */
+    @Suppress("UNCHECKED_CAST")
+    fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformElement(this, data) as E
+
+    /**
+     * Runs the provided [visitor] on subtrees with roots in this node's children.
+     *
+     * Basically, calls `accept(visitor, data)` on each child of this node.
+     *
+     * Does **not** run [visitor] on this node itself.
+     *
+     * @param visitor The visitor for children to accept.
+     * @param data An arbitrary context to pass to each invocation of [visitor]'s methods.
+     */
+    fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D)
+
+    /**
+     * Recursively transforms this node's children *in place* using [transformer].
+     *
+     * Basically, executes `this.child = this.child.transform(transformer, data)` for each child of this node.
+     *
+     * Does **not** run [transformer] on this node itself.
+     *
+     * @param transformer The transformer to use for transforming the children.
+     * @param data An arbitrary context to pass to each invocation of [transformer]'s methods.
+     */
+    fun <D> transformChildren(transformer: SirTransformer<D>, data: D)
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt
new file mode 100644
index 0000000..24772d6
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.enum]
+ */
+abstract class SirEnum : SirDeclarationContainer(), SirNamedDeclaration {
+    abstract override val origin: SirOrigin
+    abstract override val visibility: SirVisibility
+    abstract override var parent: SirDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SirDeclaration>
+    abstract val cases: List<SirEnumCase>
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitEnum(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformEnum(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirForeignDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirForeignDeclaration.kt
new file mode 100644
index 0000000..5eb2ee3
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirForeignDeclaration.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.foreignDeclaration]
+ */
+sealed class SirForeignDeclaration : SirElementBase(), SirDeclaration {
+    abstract override val origin: SirOrigin
+    abstract override val visibility: SirVisibility
+    abstract override var parent: SirDeclarationParent
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitForeignDeclaration(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformForeignDeclaration(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirForeignFunction.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirForeignFunction.kt
new file mode 100644
index 0000000..3ebdb86
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirForeignFunction.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.foreignFunction]
+ */
+abstract class SirForeignFunction : SirForeignDeclaration(), SirCallable {
+    abstract override val origin: SirOrigin
+    abstract override val visibility: SirVisibility
+    abstract override var parent: SirDeclarationParent
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitForeignFunction(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformForeignFunction(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt
new file mode 100644
index 0000000..44b1a70b
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.function]
+ */
+abstract class SirFunction : SirElementBase(), SirCallable {
+    abstract override val origin: SirOrigin
+    abstract override val visibility: SirVisibility
+    abstract override var parent: SirDeclarationParent
+    abstract val name: String
+    abstract val parameters: List<SirParameter>
+    abstract val returnType: SirType
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitFunction(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformFunction(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirModule.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirModule.kt
new file mode 100644
index 0000000..ba65684
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirModule.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.module]
+ */
+abstract class SirModule : SirDeclarationContainer(), SirNamed {
+    abstract override val declarations: List<SirDeclaration>
+    abstract override val name: String
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitModule(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformModule(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamed.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamed.kt
new file mode 100644
index 0000000..2367174
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamed.kt
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.named]
+ */
+sealed interface SirNamed : SirElement {
+    val name: String
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt
new file mode 100644
index 0000000..3d45727
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.namedDeclaration]
+ */
+sealed interface SirNamedDeclaration : SirDeclaration, SirNamed {
+    override val origin: SirOrigin
+    override val visibility: SirVisibility
+    override var parent: SirDeclarationParent
+    override val name: String
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitNamedDeclaration(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformNamedDeclaration(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt
new file mode 100644
index 0000000..d85c215
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.struct]
+ */
+abstract class SirStruct : SirDeclarationContainer(), SirNamedDeclaration {
+    abstract override val origin: SirOrigin
+    abstract override val visibility: SirVisibility
+    abstract override var parent: SirDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SirDeclaration>
+
+    override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
+        visitor.visitStruct(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
+        transformer.transformStruct(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt
new file mode 100644
index 0000000..b9137c4
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+@file:Suppress("DuplicatedCode", "unused")
+
+package org.jetbrains.kotlin.sir.builder
+
+import kotlin.contracts.*
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.impl.SirEnumImpl
+
+@SirBuilderDsl
+class SirEnumBuilder {
+    var origin: SirOrigin = SirOrigin.Unknown
+    var visibility: SirVisibility = SirVisibility.PUBLIC
+    lateinit var name: String
+    val declarations: MutableList<SirDeclaration> = mutableListOf()
+    val cases: MutableList<SirEnumCase> = mutableListOf()
+
+    fun build(): SirEnum {
+        return SirEnumImpl(
+            origin,
+            visibility,
+            name,
+            declarations,
+            cases,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildEnum(init: SirEnumBuilder.() -> Unit): SirEnum {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SirEnumBuilder().apply(init).build()
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildEnumCopy(original: SirEnum, init: SirEnumBuilder.() -> Unit): SirEnum {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    val copyBuilder = SirEnumBuilder()
+    copyBuilder.origin = original.origin
+    copyBuilder.visibility = original.visibility
+    copyBuilder.name = original.name
+    copyBuilder.declarations.addAll(original.declarations)
+    copyBuilder.cases.addAll(original.cases)
+    return copyBuilder.apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirForeignFunctionBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirForeignFunctionBuilder.kt
new file mode 100644
index 0000000..3dc451c
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirForeignFunctionBuilder.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+@file:Suppress("DuplicatedCode", "unused")
+
+package org.jetbrains.kotlin.sir.builder
+
+import kotlin.contracts.*
+import org.jetbrains.kotlin.sir.SirBuilderDsl
+import org.jetbrains.kotlin.sir.SirForeignFunction
+import org.jetbrains.kotlin.sir.SirOrigin
+import org.jetbrains.kotlin.sir.SirVisibility
+import org.jetbrains.kotlin.sir.impl.SirForeignFunctionImpl
+
+@SirBuilderDsl
+class SirForeignFunctionBuilder {
+    var origin: SirOrigin = SirOrigin.Unknown
+    var visibility: SirVisibility = SirVisibility.PUBLIC
+
+    fun build(): SirForeignFunction {
+        return SirForeignFunctionImpl(
+            origin,
+            visibility,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildForeignFunction(init: SirForeignFunctionBuilder.() -> Unit = {}): SirForeignFunction {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SirForeignFunctionBuilder().apply(init).build()
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildForeignFunctionCopy(original: SirForeignFunction, init: SirForeignFunctionBuilder.() -> Unit = {}): SirForeignFunction {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    val copyBuilder = SirForeignFunctionBuilder()
+    copyBuilder.origin = original.origin
+    copyBuilder.visibility = original.visibility
+    return copyBuilder.apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt
new file mode 100644
index 0000000..f0c48ce
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+@file:Suppress("DuplicatedCode", "unused")
+
+package org.jetbrains.kotlin.sir.builder
+
+import kotlin.contracts.*
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.impl.SirFunctionImpl
+
+@SirBuilderDsl
+class SirFunctionBuilder {
+    var origin: SirOrigin = SirOrigin.Unknown
+    var visibility: SirVisibility = SirVisibility.PUBLIC
+    lateinit var name: String
+    val parameters: MutableList<SirParameter> = mutableListOf()
+    lateinit var returnType: SirType
+
+    fun build(): SirFunction {
+        return SirFunctionImpl(
+            origin,
+            visibility,
+            name,
+            parameters,
+            returnType,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildFunction(init: SirFunctionBuilder.() -> Unit): SirFunction {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SirFunctionBuilder().apply(init).build()
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildFunctionCopy(original: SirFunction, init: SirFunctionBuilder.() -> Unit): SirFunction {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    val copyBuilder = SirFunctionBuilder()
+    copyBuilder.origin = original.origin
+    copyBuilder.visibility = original.visibility
+    copyBuilder.name = original.name
+    copyBuilder.parameters.addAll(original.parameters)
+    copyBuilder.returnType = original.returnType
+    return copyBuilder.apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirModuleBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirModuleBuilder.kt
new file mode 100644
index 0000000..e2a841e
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirModuleBuilder.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+@file:Suppress("DuplicatedCode", "unused")
+
+package org.jetbrains.kotlin.sir.builder
+
+import kotlin.contracts.*
+import org.jetbrains.kotlin.sir.SirBuilderDsl
+import org.jetbrains.kotlin.sir.SirDeclaration
+import org.jetbrains.kotlin.sir.SirModule
+import org.jetbrains.kotlin.sir.impl.SirModuleImpl
+
+@SirBuilderDsl
+class SirModuleBuilder {
+    val declarations: MutableList<SirDeclaration> = mutableListOf()
+    lateinit var name: String
+
+    fun build(): SirModule {
+        return SirModuleImpl(
+            declarations,
+            name,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildModule(init: SirModuleBuilder.() -> Unit): SirModule {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SirModuleBuilder().apply(init).build()
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildModuleCopy(original: SirModule, init: SirModuleBuilder.() -> Unit): SirModule {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    val copyBuilder = SirModuleBuilder()
+    copyBuilder.declarations.addAll(original.declarations)
+    copyBuilder.name = original.name
+    return copyBuilder.apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt
new file mode 100644
index 0000000..aa7c0b3
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+@file:Suppress("DuplicatedCode", "unused")
+
+package org.jetbrains.kotlin.sir.builder
+
+import kotlin.contracts.*
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.impl.SirStructImpl
+
+@SirBuilderDsl
+class SirStructBuilder {
+    var origin: SirOrigin = SirOrigin.Unknown
+    var visibility: SirVisibility = SirVisibility.PUBLIC
+    lateinit var name: String
+    val declarations: MutableList<SirDeclaration> = mutableListOf()
+
+    fun build(): SirStruct {
+        return SirStructImpl(
+            origin,
+            visibility,
+            name,
+            declarations,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildStruct(init: SirStructBuilder.() -> Unit): SirStruct {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SirStructBuilder().apply(init).build()
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildStructCopy(original: SirStruct, init: SirStructBuilder.() -> Unit): SirStruct {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    val copyBuilder = SirStructBuilder()
+    copyBuilder.origin = original.origin
+    copyBuilder.visibility = original.visibility
+    copyBuilder.name = original.name
+    copyBuilder.declarations.addAll(original.declarations)
+    return copyBuilder.apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt
new file mode 100644
index 0000000..908d28c
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.util.transformInPlace
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+internal class SirEnumImpl(
+    override val origin: SirOrigin,
+    override val visibility: SirVisibility,
+    override val name: String,
+    override val declarations: MutableList<SirDeclaration>,
+    override val cases: MutableList<SirEnumCase>,
+) : SirEnum() {
+    override lateinit var parent: SirDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirForeignFunctionImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirForeignFunctionImpl.kt
new file mode 100644
index 0000000..c94482f
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirForeignFunctionImpl.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.impl
+
+import org.jetbrains.kotlin.sir.SirDeclarationParent
+import org.jetbrains.kotlin.sir.SirForeignFunction
+import org.jetbrains.kotlin.sir.SirOrigin
+import org.jetbrains.kotlin.sir.SirVisibility
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+internal class SirForeignFunctionImpl(
+    override val origin: SirOrigin,
+    override val visibility: SirVisibility,
+) : SirForeignFunction() {
+    override lateinit var parent: SirDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt
new file mode 100644
index 0000000..dca0db2
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+internal class SirFunctionImpl(
+    override val origin: SirOrigin,
+    override val visibility: SirVisibility,
+    override val name: String,
+    override val parameters: MutableList<SirParameter>,
+    override val returnType: SirType,
+) : SirFunction() {
+    override lateinit var parent: SirDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirModuleImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirModuleImpl.kt
new file mode 100644
index 0000000..4376a9d
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirModuleImpl.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.impl
+
+import org.jetbrains.kotlin.sir.SirDeclaration
+import org.jetbrains.kotlin.sir.SirModule
+import org.jetbrains.kotlin.sir.util.transformInPlace
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+internal class SirModuleImpl(
+    override val declarations: MutableList<SirDeclaration>,
+    override val name: String,
+) : SirModule() {
+
+    override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt
new file mode 100644
index 0000000..e0c641b
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.util.transformInPlace
+import org.jetbrains.kotlin.sir.visitors.SirTransformer
+import org.jetbrains.kotlin.sir.visitors.SirVisitor
+
+internal class SirStructImpl(
+    override val origin: SirOrigin,
+    override val visibility: SirVisibility,
+    override val name: String,
+    override val declarations: MutableList<SirDeclaration>,
+) : SirStruct() {
+    override lateinit var parent: SirDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SirTransformer.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SirTransformer.kt
new file mode 100644
index 0000000..9b5eed5
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SirTransformer.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.visitors
+
+import org.jetbrains.kotlin.sir.*
+
+/**
+ * Auto-generated by [org.jetbrains.kotlin.sir.tree.generator.printer.TransformerPrinter]
+ */
+abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
+
+    abstract fun <E : SirElement> transformElement(element: E, data: D): E
+
+    final override fun visitElement(element: SirElement, data: D): SirElement {
+        return transformElement(element, data)
+    }
+
+    open fun transformModule(module: SirModule, data: D): SirModule {
+        return transformElement(module, data)
+    }
+
+    final override fun visitModule(module: SirModule, data: D): SirModule {
+        return transformModule(module, data)
+    }
+
+
+    open fun transformDeclarationContainer(declarationContainer: SirDeclarationContainer, data: D): SirDeclarationContainer {
+        return transformElement(declarationContainer, data)
+    }
+
+    final override fun visitDeclarationContainer(declarationContainer: SirDeclarationContainer, data: D): SirDeclarationContainer {
+        return transformDeclarationContainer(declarationContainer, data)
+    }
+
+    open fun transformDeclaration(declaration: SirDeclaration, data: D): SirDeclaration {
+        return transformElement(declaration, data)
+    }
+
+    final override fun visitDeclaration(declaration: SirDeclaration, data: D): SirDeclaration {
+        return transformDeclaration(declaration, data)
+    }
+
+    open fun transformForeignDeclaration(foreignDeclaration: SirForeignDeclaration, data: D): SirDeclaration {
+        return transformElement(foreignDeclaration, data)
+    }
+
+    final override fun visitForeignDeclaration(foreignDeclaration: SirForeignDeclaration, data: D): SirDeclaration {
+        return transformForeignDeclaration(foreignDeclaration, data)
+    }
+
+
+    open fun transformNamedDeclaration(namedDeclaration: SirNamedDeclaration, data: D): SirDeclaration {
+        return transformElement(namedDeclaration, data)
+    }
+
+    final override fun visitNamedDeclaration(namedDeclaration: SirNamedDeclaration, data: D): SirDeclaration {
+        return transformNamedDeclaration(namedDeclaration, data)
+    }
+
+    open fun transformEnum(enum: SirEnum, data: D): SirDeclaration {
+        return transformElement(enum, data)
+    }
+
+    final override fun visitEnum(enum: SirEnum, data: D): SirDeclaration {
+        return transformEnum(enum, data)
+    }
+
+    open fun transformStruct(struct: SirStruct, data: D): SirDeclaration {
+        return transformElement(struct, data)
+    }
+
+    final override fun visitStruct(struct: SirStruct, data: D): SirDeclaration {
+        return transformStruct(struct, data)
+    }
+
+    open fun transformCallable(callable: SirCallable, data: D): SirDeclaration {
+        return transformElement(callable, data)
+    }
+
+    final override fun visitCallable(callable: SirCallable, data: D): SirDeclaration {
+        return transformCallable(callable, data)
+    }
+
+    open fun transformFunction(function: SirFunction, data: D): SirDeclaration {
+        return transformElement(function, data)
+    }
+
+    final override fun visitFunction(function: SirFunction, data: D): SirDeclaration {
+        return transformFunction(function, data)
+    }
+
+    open fun transformForeignFunction(foreignFunction: SirForeignFunction, data: D): SirDeclaration {
+        return transformElement(foreignFunction, data)
+    }
+
+    final override fun visitForeignFunction(foreignFunction: SirForeignFunction, data: D): SirDeclaration {
+        return transformForeignFunction(foreignFunction, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SirVisitor.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SirVisitor.kt
new file mode 100644
index 0000000..7c2cc54
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SirVisitor.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010-2023 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir.visitors
+
+import org.jetbrains.kotlin.sir.*
+
+/**
+ * Auto-generated by [org.jetbrains.kotlin.sir.tree.generator.printer.VisitorPrinter]
+ */
+abstract class SirVisitor<out R, in D> {
+
+    abstract fun visitElement(element: SirElement, data: D): R
+
+    open fun visitModule(module: SirModule, data: D): R =
+        visitElement(module, data)
+
+    open fun visitDeclarationContainer(declarationContainer: SirDeclarationContainer, data: D): R =
+        visitElement(declarationContainer, data)
+
+    open fun visitDeclaration(declaration: SirDeclaration, data: D): R =
+        visitElement(declaration, data)
+
+    open fun visitForeignDeclaration(foreignDeclaration: SirForeignDeclaration, data: D): R =
+        visitDeclaration(foreignDeclaration, data)
+
+    open fun visitNamedDeclaration(namedDeclaration: SirNamedDeclaration, data: D): R =
+        visitDeclaration(namedDeclaration, data)
+
+    open fun visitEnum(enum: SirEnum, data: D): R =
+        visitNamedDeclaration(enum, data)
+
+    open fun visitStruct(struct: SirStruct, data: D): R =
+        visitNamedDeclaration(struct, data)
+
+    open fun visitCallable(callable: SirCallable, data: D): R =
+        visitDeclaration(callable, data)
+
+    open fun visitFunction(function: SirFunction, data: D): R =
+        visitCallable(function, data)
+
+    open fun visitForeignFunction(foreignFunction: SirForeignFunction, data: D): R =
+        visitCallable(foreignFunction, data)
+}
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
index 5ccf8ae..2f0c0c4 100644
--- a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
@@ -5,8 +5,10 @@
 
 package org.jetbrains.kotlin.sir.tree.generator
 
+import org.jetbrains.kotlin.generators.tree.*
 import org.jetbrains.kotlin.sir.tree.generator.config.AbstractSwiftIrTreeBuilderConfigurator
 import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Implementation
 
 class BuilderConfigurator(elements: List<Element>) : AbstractSwiftIrTreeBuilderConfigurator(elements) {
 
@@ -21,5 +23,23 @@
         configureFieldInAllLeafBuilders("visibility") {
             default(it, "SirVisibility.PUBLIC")
         }
+
+        configureAllLeafBuilders {
+            withCopy()
+        }
     }
-}
\ No newline at end of file
+}
+
+//AbstractBuilderConfigurator<Element, Implementation, Field, Field>
+private fun <Element, Implementation, BuilderField, ElementField> AbstractBuilderConfigurator<Element, Implementation, BuilderField, ElementField>.configureAllLeafBuilders(
+    builderPredicate: (LeafBuilder<BuilderField, Element, Implementation>) -> Boolean = { true },
+    init: AbstractBuilderConfigurator<Element, Implementation, BuilderField, ElementField>.LeafBuilderConfigurationContext.() -> Unit,
+) where Element : AbstractElement<Element, ElementField, Implementation>,
+        Implementation : AbstractImplementation<Implementation, Element, BuilderField>,
+        BuilderField : AbstractField<*>,
+        BuilderField : AbstractFieldWithDefaultValue<*>,
+        ElementField : AbstractField<ElementField> = elements
+    .flatMap { it.allImplementations }
+    .mapNotNull { it.builder }
+    .filter(builderPredicate)
+    .forEach { LeafBuilderConfigurationContext(it).init() }
\ No newline at end of file