[Swift IR] A prototype of the Swift IR tree generator
diff --git a/.idea/runConfigurations/Generate_SwiftIR_tree.xml b/.idea/runConfigurations/Generate_SwiftIR_tree.xml
new file mode 100644
index 0000000..b2301a3
--- /dev/null
+++ b/.idea/runConfigurations/Generate_SwiftIR_tree.xml
@@ -0,0 +1,24 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Generate SwiftIR tree" type="GradleRunConfiguration" factoryName="Gradle" folderName="Generators">
+    <ExternalSystemSettings>
+      <option name="executionName" />
+      <option name="externalProjectPath" value="$PROJECT_DIR$/native/swift/sir" />
+      <option name="externalSystemIdString" value="GRADLE" />
+      <option name="scriptParameters" value="" />
+      <option name="taskDescriptions">
+        <list />
+      </option>
+      <option name="taskNames">
+        <list>
+          <option value="generateTree" />
+        </list>
+      </option>
+      <option name="vmOptions" value="" />
+    </ExternalSystemSettings>
+    <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
+    <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
+    <DebugAllEnabled>false</DebugAllEnabled>
+    <RunAsTest>false</RunAsTest>
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index e187c9e..08f2b46 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -483,6 +483,7 @@
         ":compiler:fir:raw-fir:light-tree2fir",
         ":compiler:fir:tree:tree-generator",
         ":compiler:ir.tree:tree-generator",
+        ":native:swift:sir:tree-generator",
         ":generators:tree-generator-common",
         ":kotlin-lombok-compiler-plugin.k1",
         ":kotlinx-serialization-compiler-plugin.k2",
diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt
index 0193172..bb5349f 100644
--- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt
+++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt
@@ -49,7 +49,8 @@
      * If `true`, visitor methods for generic tree elements will be parameterized correspondingly.
      * Otherwise, type arguments of generic tree elements will be replaced with `*`.
      */
-    abstract val allowTypeParametersInVisitorMethods: Boolean
+    open val allowTypeParametersInVisitorMethods: Boolean
+        get() = false
 
     /**
      * Allows to customize the default element to visit if the method for visiting this [element] is not overridden.
diff --git a/native/swift/sir/build.gradle.kts b/native/swift/sir/build.gradle.kts
index ba80eb0..625b530 100644
--- a/native/swift/sir/build.gradle.kts
+++ b/native/swift/sir/build.gradle.kts
@@ -1,3 +1,5 @@
+import org.jetbrains.kotlin.ideaExt.idea
+
 plugins {
     kotlin("jvm")
 }
@@ -7,11 +9,55 @@
 dependencies {
     compileOnly(kotlinStdlib())
 
+    if (kotlinBuildProperties.isInIdeaSync) {
+        compileOnly(project("tree-generator")) // Provided, so that IDEA can recognize references to this module in KDoc.
+    }
+
     testImplementation(libs.junit4)
     testImplementation(projectTests(":compiler:tests-common"))
 }
 
 sourceSets {
-    "main" { projectDefault() }
+    "main" {
+        projectDefault()
+        generatedDir()
+    }
     "test" { projectDefault() }
-}
\ No newline at end of file
+}
+
+val generatorClasspath by configurations.creating
+
+dependencies {
+    generatorClasspath(project("tree-generator"))
+}
+
+val generationRoot = projectDir.resolve("gen")
+
+val generateTree by tasks.registering(NoDebugJavaExec::class) {
+
+    val generatorRoot = "$projectDir/tree-generator/src/"
+
+    val generatorConfigurationFiles = fileTree(generatorRoot) {
+        include("**/*.kt")
+    }
+
+    inputs.files(generatorConfigurationFiles)
+    outputs.dirs(generationRoot)
+
+    args(generationRoot)
+    workingDir = rootDir
+    classpath = generatorClasspath
+    mainClass.set("org.jetbrains.kotlin.sir.tree.generator.MainKt")
+    systemProperties["line.separator"] = "\n"
+}
+
+tasks.named("compileKotlin") {
+    dependsOn(generateTree)
+}
+
+if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
+    apply(plugin = "idea")
+    idea {
+        this.module.generatedSourceDirs.add(generationRoot)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrAccessor.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrAccessor.kt
new file mode 100644
index 0000000..26bb959
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrAccessor.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.accessor]
+ */
+sealed class SwiftIrAccessor : SwiftIrElementBase(), SwiftIrCallable {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitAccessor(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformAccessor(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrAccessorContainer.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrAccessorContainer.kt
new file mode 100644
index 0000000..d16e363
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrAccessorContainer.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.accessorContainer]
+ */
+sealed interface SwiftIrAccessorContainer : SwiftIrElement {
+    val getter: SwiftIrGetter
+    val setter: SwiftIrSetter?
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitAccessorContainer(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformAccessorContainer(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrActor.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrActor.kt
new file mode 100644
index 0000000..b6fa408
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrActor.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.actor]
+ */
+abstract class SwiftIrActor : SwiftIrDeclarationContainer(), SwiftIrNamedTypeDeclaration {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SwiftIrDeclaration>
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitActor(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformActor(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrCallable.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrCallable.kt
new file mode 100644
index 0000000..9780b97
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrCallable.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.callable]
+ */
+sealed interface SwiftIrCallable : SwiftIrDeclaration {
+    override val origin: Origin
+    override val attributes: List<Attribute>
+    override val visibility: SwiftVisibility
+    override var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitCallable(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformCallable(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrClass.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrClass.kt
new file mode 100644
index 0000000..85a0326
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrClass.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.class]
+ */
+abstract class SwiftIrClass : SwiftIrDeclarationContainer(), SwiftIrNamedTypeDeclaration {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SwiftIrDeclaration>
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitClass(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformClass(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclaration.kt
new file mode 100644
index 0000000..7ec5a14
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclaration.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.declaration]
+ */
+sealed interface SwiftIrDeclaration : SwiftIrElement {
+    val origin: Origin
+    val attributes: List<Attribute>
+    val visibility: SwiftVisibility
+    var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitDeclaration(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformDeclaration(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationContainer.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationContainer.kt
new file mode 100644
index 0000000..c5afa1a
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationContainer.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.declarationContainer]
+ */
+sealed class SwiftIrDeclarationContainer : SwiftIrDeclarationParent() {
+    abstract val declarations: List<SwiftIrDeclaration>
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitDeclarationContainer(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformDeclarationContainer(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationParent.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationParent.kt
new file mode 100644
index 0000000..251f658
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationParent.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 SwiftIrDeclarationParent : SwiftIrElementBase(), SwiftIrElement
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationWithName.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationWithName.kt
new file mode 100644
index 0000000..271169b
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrDeclarationWithName.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.declarationWithName]
+ */
+sealed interface SwiftIrDeclarationWithName : SwiftIrDeclaration {
+    override val origin: Origin
+    override val attributes: List<Attribute>
+    override val visibility: SwiftVisibility
+    override var parent: SwiftIrDeclarationParent
+    val name: String
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitDeclarationWithName(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformDeclarationWithName(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrElement.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrElement.kt
new file mode 100644
index 0000000..ed88732
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrElement.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * The root interface of the Swift IR tree.
+ *
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.rootElement]
+ */
+sealed interface SwiftIrElement {
+    /**
+     * 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: SwiftIrVisitor<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 : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<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: SwiftIrVisitor<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: SwiftIrTransformer<D>, data: D)
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrEnum.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrEnum.kt
new file mode 100644
index 0000000..bcaf902
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrEnum.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
+
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.enum]
+ */
+abstract class SwiftIrEnum : SwiftIrDeclarationContainer(), SwiftIrNamedTypeDeclaration {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SwiftIrDeclaration>
+    abstract val cases: List<SwiftIrEnumCase>
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitEnum(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformEnum(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrEnumCase.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrEnumCase.kt
new file mode 100644
index 0000000..04b9fc8
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrEnumCase.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.enumCase]
+ */
+abstract class SwiftIrEnumCase : SwiftIrElementBase(), SwiftIrDeclarationWithName {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitEnumCase(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformEnumCase(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrExpression.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrExpression.kt
new file mode 100644
index 0000000..deed441
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrExpression.kt
@@ -0,0 +1,24 @@
+/*
+ * 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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.expression]
+ */
+abstract class SwiftIrExpression : SwiftIrElementBase(), SwiftIrElement {
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitExpression(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformExpression(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrFunction.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrFunction.kt
new file mode 100644
index 0000000..263b309
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrFunction.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.function]
+ */
+abstract class SwiftIrFunction : SwiftIrElementBase(), SwiftIrCallable, SwiftIrDeclarationWithName {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitFunction(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformFunction(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrGetter.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrGetter.kt
new file mode 100644
index 0000000..da9b31d
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrGetter.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.getter]
+ */
+abstract class SwiftIrGetter : SwiftIrAccessor() {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitGetter(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformGetter(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrInit.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrInit.kt
new file mode 100644
index 0000000..7e19025
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrInit.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.init]
+ */
+abstract class SwiftIrInit : SwiftIrElementBase(), SwiftIrCallable {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitInit(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformInit(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrModule.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrModule.kt
new file mode 100644
index 0000000..3893337
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrModule.kt
@@ -0,0 +1,24 @@
+/*
+ * 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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.module]
+ */
+abstract class SwiftIrModule : SwiftIrElementBase(), SwiftIrElement {
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitModule(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformModule(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrNamedTypeDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrNamedTypeDeclaration.kt
new file mode 100644
index 0000000..e7aa249
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrNamedTypeDeclaration.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.namedTypeDeclaration]
+ */
+sealed interface SwiftIrNamedTypeDeclaration : SwiftIrDeclarationWithName {
+    override val origin: Origin
+    override val attributes: List<Attribute>
+    override val visibility: SwiftVisibility
+    override var parent: SwiftIrDeclarationParent
+    override val name: String
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitNamedTypeDeclaration(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformNamedTypeDeclaration(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrProperty.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrProperty.kt
new file mode 100644
index 0000000..0434b76
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrProperty.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
+
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.property]
+ */
+abstract class SwiftIrProperty : SwiftIrElementBase(), SwiftIrDeclarationWithName, SwiftIrAccessorContainer {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+    abstract override val getter: SwiftIrGetter
+    abstract override val setter: SwiftIrSetter?
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitProperty(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformProperty(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrProtocol.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrProtocol.kt
new file mode 100644
index 0000000..140b244
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrProtocol.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.protocol]
+ */
+abstract class SwiftIrProtocol : SwiftIrDeclarationContainer(), SwiftIrNamedTypeDeclaration {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SwiftIrDeclaration>
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitProtocol(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformProtocol(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrSetter.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrSetter.kt
new file mode 100644
index 0000000..9cc39679
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrSetter.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.setter]
+ */
+abstract class SwiftIrSetter : SwiftIrAccessor() {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitSetter(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformSetter(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrStruct.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrStruct.kt
new file mode 100644
index 0000000..3f8d3a0
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrStruct.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.struct]
+ */
+abstract class SwiftIrStruct : SwiftIrDeclarationContainer(), SwiftIrNamedTypeDeclaration {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+    abstract override val declarations: List<SwiftIrDeclaration>
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitStruct(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformStruct(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrSubscript.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrSubscript.kt
new file mode 100644
index 0000000..925b7ed
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrSubscript.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.subscript]
+ */
+abstract class SwiftIrSubscript : SwiftIrElementBase(), SwiftIrDeclaration, SwiftIrAccessorContainer {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val getter: SwiftIrGetter
+    abstract override val setter: SwiftIrSetter?
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitSubscript(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformSubscript(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrTypeAlias.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrTypeAlias.kt
new file mode 100644
index 0000000..58ee059
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SwiftIrTypeAlias.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.typeAlias]
+ */
+abstract class SwiftIrTypeAlias : SwiftIrElementBase(), SwiftIrNamedTypeDeclaration {
+    abstract override val origin: Origin
+    abstract override val attributes: List<Attribute>
+    abstract override val visibility: SwiftVisibility
+    abstract override var parent: SwiftIrDeclarationParent
+    abstract override val name: String
+
+    override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R =
+        visitor.visitTypeAlias(this, data)
+
+    @Suppress("UNCHECKED_CAST")
+    override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E =
+        transformer.transformTypeAlias(this, data) as E
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrActorBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrActorBuilder.kt
new file mode 100644
index 0000000..3aa587d
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrActorBuilder.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.SwiftIrActorImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrActorBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+    val declarations: MutableList<SwiftIrDeclaration> = mutableListOf()
+
+    fun build(): SwiftIrActor {
+        return SwiftIrActorImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+            declarations,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildActor(init: SwiftIrActorBuilder.() -> Unit): SwiftIrActor {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrActorBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrClassBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrClassBuilder.kt
new file mode 100644
index 0000000..eeca2a0
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrClassBuilder.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.SwiftIrClassImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrClassBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+    val declarations: MutableList<SwiftIrDeclaration> = mutableListOf()
+
+    fun build(): SwiftIrClass {
+        return SwiftIrClassImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+            declarations,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildClass(init: SwiftIrClassBuilder.() -> Unit): SwiftIrClass {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrClassBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrEnumBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrEnumBuilder.kt
new file mode 100644
index 0000000..a223f6d
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrEnumBuilder.kt
@@ -0,0 +1,44 @@
+/*
+ * 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.SwiftIrEnumImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrEnumBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+    val declarations: MutableList<SwiftIrDeclaration> = mutableListOf()
+    val cases: MutableList<SwiftIrEnumCase> = mutableListOf()
+
+    fun build(): SwiftIrEnum {
+        return SwiftIrEnumImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+            declarations,
+            cases,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildEnum(init: SwiftIrEnumBuilder.() -> Unit): SwiftIrEnum {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrEnumBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrEnumCaseBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrEnumCaseBuilder.kt
new file mode 100644
index 0000000..a45aec2
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrEnumCaseBuilder.kt
@@ -0,0 +1,40 @@
+/*
+ * 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.SwiftIrEnumCaseImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrEnumCaseBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+
+    fun build(): SwiftIrEnumCase {
+        return SwiftIrEnumCaseImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildEnumCase(init: SwiftIrEnumCaseBuilder.() -> Unit): SwiftIrEnumCase {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrEnumCaseBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrExpressionBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrExpressionBuilder.kt
new file mode 100644
index 0000000..5d1e004
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrExpressionBuilder.kt
@@ -0,0 +1,18 @@
+/*
+ * 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 org.jetbrains.kotlin.sir.SwiftIrExpression
+import org.jetbrains.kotlin.sir.impl.SwiftIrExpressionImpl
+
+fun buildExpression(): SwiftIrExpression {
+    return SwiftIrExpressionImpl()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrFunctionBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrFunctionBuilder.kt
new file mode 100644
index 0000000..649ce29
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrFunctionBuilder.kt
@@ -0,0 +1,40 @@
+/*
+ * 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.SwiftIrFunctionImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrFunctionBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+
+    fun build(): SwiftIrFunction {
+        return SwiftIrFunctionImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildFunction(init: SwiftIrFunctionBuilder.() -> Unit): SwiftIrFunction {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrFunctionBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrGetterBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrGetterBuilder.kt
new file mode 100644
index 0000000..5244d76
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrGetterBuilder.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.SwiftIrGetterImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrGetterBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+
+    fun build(): SwiftIrGetter {
+        return SwiftIrGetterImpl(
+            origin,
+            attributes,
+            visibility,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildGetter(init: SwiftIrGetterBuilder.() -> Unit): SwiftIrGetter {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrGetterBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrInitBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrInitBuilder.kt
new file mode 100644
index 0000000..f544196
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrInitBuilder.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.SwiftIrInitImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrInitBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+
+    fun build(): SwiftIrInit {
+        return SwiftIrInitImpl(
+            origin,
+            attributes,
+            visibility,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildInit(init: SwiftIrInitBuilder.() -> Unit): SwiftIrInit {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrInitBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrModuleBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrModuleBuilder.kt
new file mode 100644
index 0000000..7401453
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrModuleBuilder.kt
@@ -0,0 +1,18 @@
+/*
+ * 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 org.jetbrains.kotlin.sir.SwiftIrModule
+import org.jetbrains.kotlin.sir.impl.SwiftIrModuleImpl
+
+fun buildModule(): SwiftIrModule {
+    return SwiftIrModuleImpl()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrPropertyBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrPropertyBuilder.kt
new file mode 100644
index 0000000..bc3de4e
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrPropertyBuilder.kt
@@ -0,0 +1,45 @@
+/*
+ * 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.SwiftIrPropertyImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrPropertyBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+    lateinit var getter: SwiftIrGetter
+    var setter: SwiftIrSetter? = null
+
+    fun build(): SwiftIrProperty {
+        return SwiftIrPropertyImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+            getter,
+            setter,
+        )
+    }
+
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildProperty(init: SwiftIrPropertyBuilder.() -> Unit): SwiftIrProperty {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrPropertyBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrProtocolBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrProtocolBuilder.kt
new file mode 100644
index 0000000..bd84a30
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrProtocolBuilder.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.SwiftIrProtocolImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrProtocolBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+    val declarations: MutableList<SwiftIrDeclaration> = mutableListOf()
+
+    fun build(): SwiftIrProtocol {
+        return SwiftIrProtocolImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+            declarations,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildProtocol(init: SwiftIrProtocolBuilder.() -> Unit): SwiftIrProtocol {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrProtocolBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrSetterBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrSetterBuilder.kt
new file mode 100644
index 0000000..3411d9f
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrSetterBuilder.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.SwiftIrSetterImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrSetterBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+
+    fun build(): SwiftIrSetter {
+        return SwiftIrSetterImpl(
+            origin,
+            attributes,
+            visibility,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildSetter(init: SwiftIrSetterBuilder.() -> Unit): SwiftIrSetter {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrSetterBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrStructBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrStructBuilder.kt
new file mode 100644
index 0000000..c471844c
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrStructBuilder.kt
@@ -0,0 +1,42 @@
+/*
+ * 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.SwiftIrStructImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrStructBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+    val declarations: MutableList<SwiftIrDeclaration> = mutableListOf()
+
+    fun build(): SwiftIrStruct {
+        return SwiftIrStructImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+            declarations,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildStruct(init: SwiftIrStructBuilder.() -> Unit): SwiftIrStruct {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrStructBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrSubscriptBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrSubscriptBuilder.kt
new file mode 100644
index 0000000..83fe385
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrSubscriptBuilder.kt
@@ -0,0 +1,43 @@
+/*
+ * 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.SwiftIrSubscriptImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrSubscriptBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var getter: SwiftIrGetter
+    var setter: SwiftIrSetter? = null
+
+    fun build(): SwiftIrSubscript {
+        return SwiftIrSubscriptImpl(
+            origin,
+            attributes,
+            visibility,
+            getter,
+            setter,
+        )
+    }
+
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildSubscript(init: SwiftIrSubscriptBuilder.() -> Unit): SwiftIrSubscript {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrSubscriptBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrTypeAliasBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrTypeAliasBuilder.kt
new file mode 100644
index 0000000..6dc9d1c
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SwiftIrTypeAliasBuilder.kt
@@ -0,0 +1,40 @@
+/*
+ * 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.SwiftIrTypeAliasImpl
+
+@SwiftIrBuilderDsl
+class SwiftIrTypeAliasBuilder {
+    lateinit var origin: Origin
+    val attributes: MutableList<Attribute> = mutableListOf()
+    lateinit var visibility: SwiftVisibility
+    lateinit var name: String
+
+    fun build(): SwiftIrTypeAlias {
+        return SwiftIrTypeAliasImpl(
+            origin,
+            attributes,
+            visibility,
+            name,
+        )
+    }
+}
+
+@OptIn(ExperimentalContracts::class)
+inline fun buildTypeAlias(init: SwiftIrTypeAliasBuilder.() -> Unit): SwiftIrTypeAlias {
+    contract {
+        callsInPlace(init, InvocationKind.EXACTLY_ONCE)
+    }
+    return SwiftIrTypeAliasBuilder().apply(init).build()
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrActorImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrActorImpl.kt
new file mode 100644
index 0000000..0b82318
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrActorImpl.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrActorImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+    override val declarations: MutableList<SwiftIrDeclaration>,
+) : SwiftIrActor() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrClassImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrClassImpl.kt
new file mode 100644
index 0000000..6c2cf9c
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrClassImpl.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrClassImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+    override val declarations: MutableList<SwiftIrDeclaration>,
+) : SwiftIrClass() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrEnumCaseImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrEnumCaseImpl.kt
new file mode 100644
index 0000000..eb11344
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrEnumCaseImpl.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.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrEnumCaseImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+) : SwiftIrEnumCase() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrEnumImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrEnumImpl.kt
new file mode 100644
index 0000000..79747ce
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrEnumImpl.kt
@@ -0,0 +1,35 @@
+/*
+ * 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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrEnumImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+    override val declarations: MutableList<SwiftIrDeclaration>,
+    override val cases: MutableList<SwiftIrEnumCase>,
+) : SwiftIrEnum() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+        cases.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+        cases.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrExpressionImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrExpressionImpl.kt
new file mode 100644
index 0000000..cc60845
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrExpressionImpl.kt
@@ -0,0 +1,22 @@
+/*
+ * 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.SwiftIrExpression
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrExpressionImpl : SwiftIrExpression() {
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrFunctionImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrFunctionImpl.kt
new file mode 100644
index 0000000..993ef35
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrFunctionImpl.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.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrFunctionImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+) : SwiftIrFunction() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrGetterImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrGetterImpl.kt
new file mode 100644
index 0000000..005cb46
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrGetterImpl.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.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrGetterImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+) : SwiftIrGetter() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrInitImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrInitImpl.kt
new file mode 100644
index 0000000..467405e
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrInitImpl.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.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrInitImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+) : SwiftIrInit() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrModuleImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrModuleImpl.kt
new file mode 100644
index 0000000..73db4cf
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrModuleImpl.kt
@@ -0,0 +1,22 @@
+/*
+ * 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.SwiftIrModule
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrModuleImpl : SwiftIrModule() {
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrPropertyImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrPropertyImpl.kt
new file mode 100644
index 0000000..930b4ac
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrPropertyImpl.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.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrPropertyImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+    override val getter: SwiftIrGetter,
+    override val setter: SwiftIrSetter?,
+) : SwiftIrProperty() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        getter.accept(visitor, data)
+        setter?.accept(visitor, data)
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrProtocolImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrProtocolImpl.kt
new file mode 100644
index 0000000..c4718fb
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrProtocolImpl.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrProtocolImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+    override val declarations: MutableList<SwiftIrDeclaration>,
+) : SwiftIrProtocol() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrSetterImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrSetterImpl.kt
new file mode 100644
index 0000000..43b6dcc
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrSetterImpl.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.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrSetterImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+) : SwiftIrSetter() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrStructImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrStructImpl.kt
new file mode 100644
index 0000000..b2c8c12
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrStructImpl.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.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrStructImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+    override val declarations: MutableList<SwiftIrDeclaration>,
+) : SwiftIrStruct() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        declarations.forEach { it.accept(visitor, data) }
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+        declarations.transformInPlace(transformer, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrSubscriptImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrSubscriptImpl.kt
new file mode 100644
index 0000000..212eb8b
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrSubscriptImpl.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.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrSubscriptImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val getter: SwiftIrGetter,
+    override val setter: SwiftIrSetter?,
+) : SwiftIrSubscript() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+        getter.accept(visitor, data)
+        setter?.accept(visitor, data)
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrTypeAliasImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrTypeAliasImpl.kt
new file mode 100644
index 0000000..51f16e7
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SwiftIrTypeAliasImpl.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.impl
+
+import org.jetbrains.kotlin.sir.*
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+internal class SwiftIrTypeAliasImpl(
+    override val origin: Origin,
+    override val attributes: MutableList<Attribute>,
+    override val visibility: SwiftVisibility,
+    override val name: String,
+) : SwiftIrTypeAlias() {
+    override lateinit var parent: SwiftIrDeclarationParent
+
+    override fun <R, D> acceptChildren(visitor: SwiftIrVisitor<R, D>, data: D) {
+    }
+
+    override fun <D> transformChildren(transformer: SwiftIrTransformer<D>, data: D) {
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SwiftIrTransformer.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SwiftIrTransformer.kt
new file mode 100644
index 0000000..1b51ad9
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SwiftIrTransformer.kt
@@ -0,0 +1,200 @@
+/*
+ * 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 SwiftIrTransformer<in D> : SwiftIrVisitor<SwiftIrElement, D>() {
+
+    abstract fun <E : SwiftIrElement> transformElement(element: E, data: D): E
+
+    final override fun visitElement(element: SwiftIrElement, data: D): SwiftIrElement {
+        return transformElement(element, data)
+    }
+
+    open fun transformModule(module: SwiftIrModule, data: D): SwiftIrModule {
+        return transformElement(module, data)
+    }
+
+    final override fun visitModule(module: SwiftIrModule, data: D): SwiftIrModule {
+        return transformModule(module, data)
+    }
+
+
+    open fun transformDeclarationContainer(declarationContainer: SwiftIrDeclarationContainer, data: D): SwiftIrDeclarationContainer {
+        return transformElement(declarationContainer, data)
+    }
+
+    final override fun visitDeclarationContainer(declarationContainer: SwiftIrDeclarationContainer, data: D): SwiftIrDeclarationContainer {
+        return transformDeclarationContainer(declarationContainer, data)
+    }
+
+    open fun transformDeclaration(declaration: SwiftIrDeclaration, data: D): SwiftIrDeclaration {
+        return transformElement(declaration, data)
+    }
+
+    final override fun visitDeclaration(declaration: SwiftIrDeclaration, data: D): SwiftIrDeclaration {
+        return transformDeclaration(declaration, data)
+    }
+
+    open fun transformDeclarationWithName(declarationWithName: SwiftIrDeclarationWithName, data: D): SwiftIrDeclaration {
+        return transformElement(declarationWithName, data)
+    }
+
+    final override fun visitDeclarationWithName(declarationWithName: SwiftIrDeclarationWithName, data: D): SwiftIrDeclaration {
+        return transformDeclarationWithName(declarationWithName, data)
+    }
+
+    open fun transformNamedTypeDeclaration(namedTypeDeclaration: SwiftIrNamedTypeDeclaration, data: D): SwiftIrDeclaration {
+        return transformElement(namedTypeDeclaration, data)
+    }
+
+    final override fun visitNamedTypeDeclaration(namedTypeDeclaration: SwiftIrNamedTypeDeclaration, data: D): SwiftIrDeclaration {
+        return transformNamedTypeDeclaration(namedTypeDeclaration, data)
+    }
+
+    open fun transformTypeAlias(typeAlias: SwiftIrTypeAlias, data: D): SwiftIrDeclaration {
+        return transformElement(typeAlias, data)
+    }
+
+    final override fun visitTypeAlias(typeAlias: SwiftIrTypeAlias, data: D): SwiftIrDeclaration {
+        return transformTypeAlias(typeAlias, data)
+    }
+
+    open fun transformClass(klass: SwiftIrClass, data: D): SwiftIrDeclaration {
+        return transformElement(klass, data)
+    }
+
+    final override fun visitClass(klass: SwiftIrClass, data: D): SwiftIrDeclaration {
+        return transformClass(klass, data)
+    }
+
+    open fun transformActor(actor: SwiftIrActor, data: D): SwiftIrDeclaration {
+        return transformElement(actor, data)
+    }
+
+    final override fun visitActor(actor: SwiftIrActor, data: D): SwiftIrDeclaration {
+        return transformActor(actor, data)
+    }
+
+    open fun transformStruct(struct: SwiftIrStruct, data: D): SwiftIrDeclaration {
+        return transformElement(struct, data)
+    }
+
+    final override fun visitStruct(struct: SwiftIrStruct, data: D): SwiftIrDeclaration {
+        return transformStruct(struct, data)
+    }
+
+    open fun transformEnum(enum: SwiftIrEnum, data: D): SwiftIrDeclaration {
+        return transformElement(enum, data)
+    }
+
+    final override fun visitEnum(enum: SwiftIrEnum, data: D): SwiftIrDeclaration {
+        return transformEnum(enum, data)
+    }
+
+    open fun transformEnumCase(enumCase: SwiftIrEnumCase, data: D): SwiftIrDeclaration {
+        return transformElement(enumCase, data)
+    }
+
+    final override fun visitEnumCase(enumCase: SwiftIrEnumCase, data: D): SwiftIrDeclaration {
+        return transformEnumCase(enumCase, data)
+    }
+
+    open fun transformProtocol(protocol: SwiftIrProtocol, data: D): SwiftIrDeclaration {
+        return transformElement(protocol, data)
+    }
+
+    final override fun visitProtocol(protocol: SwiftIrProtocol, data: D): SwiftIrDeclaration {
+        return transformProtocol(protocol, data)
+    }
+
+    open fun transformCallable(callable: SwiftIrCallable, data: D): SwiftIrDeclaration {
+        return transformElement(callable, data)
+    }
+
+    final override fun visitCallable(callable: SwiftIrCallable, data: D): SwiftIrDeclaration {
+        return transformCallable(callable, data)
+    }
+
+    open fun transformFunction(function: SwiftIrFunction, data: D): SwiftIrDeclaration {
+        return transformElement(function, data)
+    }
+
+    final override fun visitFunction(function: SwiftIrFunction, data: D): SwiftIrDeclaration {
+        return transformFunction(function, data)
+    }
+
+    open fun transformInit(init: SwiftIrInit, data: D): SwiftIrDeclaration {
+        return transformElement(init, data)
+    }
+
+    final override fun visitInit(init: SwiftIrInit, data: D): SwiftIrDeclaration {
+        return transformInit(init, data)
+    }
+
+    open fun transformAccessor(accessor: SwiftIrAccessor, data: D): SwiftIrDeclaration {
+        return transformElement(accessor, data)
+    }
+
+    final override fun visitAccessor(accessor: SwiftIrAccessor, data: D): SwiftIrDeclaration {
+        return transformAccessor(accessor, data)
+    }
+
+    open fun transformGetter(getter: SwiftIrGetter, data: D): SwiftIrDeclaration {
+        return transformElement(getter, data)
+    }
+
+    final override fun visitGetter(getter: SwiftIrGetter, data: D): SwiftIrDeclaration {
+        return transformGetter(getter, data)
+    }
+
+    open fun transformSetter(setter: SwiftIrSetter, data: D): SwiftIrDeclaration {
+        return transformElement(setter, data)
+    }
+
+    final override fun visitSetter(setter: SwiftIrSetter, data: D): SwiftIrDeclaration {
+        return transformSetter(setter, data)
+    }
+
+    open fun transformAccessorContainer(accessorContainer: SwiftIrAccessorContainer, data: D): SwiftIrAccessorContainer {
+        return transformElement(accessorContainer, data)
+    }
+
+    final override fun visitAccessorContainer(accessorContainer: SwiftIrAccessorContainer, data: D): SwiftIrAccessorContainer {
+        return transformAccessorContainer(accessorContainer, data)
+    }
+
+    open fun transformProperty(property: SwiftIrProperty, data: D): SwiftIrDeclaration {
+        return transformElement(property, data)
+    }
+
+    final override fun visitProperty(property: SwiftIrProperty, data: D): SwiftIrDeclaration {
+        return transformProperty(property, data)
+    }
+
+    open fun transformSubscript(subscript: SwiftIrSubscript, data: D): SwiftIrDeclaration {
+        return transformElement(subscript, data)
+    }
+
+    final override fun visitSubscript(subscript: SwiftIrSubscript, data: D): SwiftIrDeclaration {
+        return transformSubscript(subscript, data)
+    }
+
+    open fun transformExpression(expression: SwiftIrExpression, data: D): SwiftIrExpression {
+        return transformElement(expression, data)
+    }
+
+    final override fun visitExpression(expression: SwiftIrExpression, data: D): SwiftIrExpression {
+        return transformExpression(expression, data)
+    }
+}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SwiftIrVisitor.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SwiftIrVisitor.kt
new file mode 100644
index 0000000..fc65859
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/visitors/SwiftIrVisitor.kt
@@ -0,0 +1,85 @@
+/*
+ * 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 SwiftIrVisitor<out R, in D> {
+
+    abstract fun visitElement(element: SwiftIrElement, data: D): R
+
+    open fun visitModule(module: SwiftIrModule, data: D): R =
+        visitElement(module, data)
+
+    open fun visitDeclarationContainer(declarationContainer: SwiftIrDeclarationContainer, data: D): R =
+        visitElement(declarationContainer, data)
+
+    open fun visitDeclaration(declaration: SwiftIrDeclaration, data: D): R =
+        visitElement(declaration, data)
+
+    open fun visitDeclarationWithName(declarationWithName: SwiftIrDeclarationWithName, data: D): R =
+        visitDeclaration(declarationWithName, data)
+
+    open fun visitNamedTypeDeclaration(namedTypeDeclaration: SwiftIrNamedTypeDeclaration, data: D): R =
+        visitDeclarationWithName(namedTypeDeclaration, data)
+
+    open fun visitTypeAlias(typeAlias: SwiftIrTypeAlias, data: D): R =
+        visitNamedTypeDeclaration(typeAlias, data)
+
+    open fun visitClass(klass: SwiftIrClass, data: D): R =
+        visitNamedTypeDeclaration(klass, data)
+
+    open fun visitActor(actor: SwiftIrActor, data: D): R =
+        visitNamedTypeDeclaration(actor, data)
+
+    open fun visitStruct(struct: SwiftIrStruct, data: D): R =
+        visitNamedTypeDeclaration(struct, data)
+
+    open fun visitEnum(enum: SwiftIrEnum, data: D): R =
+        visitNamedTypeDeclaration(enum, data)
+
+    open fun visitEnumCase(enumCase: SwiftIrEnumCase, data: D): R =
+        visitDeclarationWithName(enumCase, data)
+
+    open fun visitProtocol(protocol: SwiftIrProtocol, data: D): R =
+        visitNamedTypeDeclaration(protocol, data)
+
+    open fun visitCallable(callable: SwiftIrCallable, data: D): R =
+        visitDeclaration(callable, data)
+
+    open fun visitFunction(function: SwiftIrFunction, data: D): R =
+        visitCallable(function, data)
+
+    open fun visitInit(init: SwiftIrInit, data: D): R =
+        visitCallable(init, data)
+
+    open fun visitAccessor(accessor: SwiftIrAccessor, data: D): R =
+        visitCallable(accessor, data)
+
+    open fun visitGetter(getter: SwiftIrGetter, data: D): R =
+        visitAccessor(getter, data)
+
+    open fun visitSetter(setter: SwiftIrSetter, data: D): R =
+        visitAccessor(setter, data)
+
+    open fun visitAccessorContainer(accessorContainer: SwiftIrAccessorContainer, data: D): R =
+        visitElement(accessorContainer, data)
+
+    open fun visitProperty(property: SwiftIrProperty, data: D): R =
+        visitAccessorContainer(property, data)
+
+    open fun visitSubscript(subscript: SwiftIrSubscript, data: D): R =
+        visitAccessorContainer(subscript, data)
+
+    open fun visitExpression(expression: SwiftIrExpression, data: D): R =
+        visitElement(expression, data)
+}
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/Attribute.kt
similarity index 70%
copy from native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
copy to native/swift/sir/src/org/jetbrains/kotlin/sir/Attribute.kt
index b98c914..8960db9 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/Attribute.kt
@@ -5,8 +5,4 @@
 
 package org.jetbrains.kotlin.sir
 
-/**
- * A marker interface that denotes Swift IR elements.
- */
-interface SirElement {
-}
\ No newline at end of file
+data class Attribute(val name: String, val arguments: List<Pair<String, SwiftIrExpression>>? = null)
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/Origin.kt
similarity index 74%
rename from native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
rename to native/swift/sir/src/org/jetbrains/kotlin/sir/Origin.kt
index b98c914..7334907 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/Origin.kt
@@ -5,8 +5,6 @@
 
 package org.jetbrains.kotlin.sir
 
-/**
- * A marker interface that denotes Swift IR elements.
- */
-interface SirElement {
+class Origin {
+    // TODO
 }
\ No newline at end of file
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrBuilderDsl.kt
similarity index 73%
copy from native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
copy to native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrBuilderDsl.kt
index b98c914..b6cca12 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrBuilderDsl.kt
@@ -5,8 +5,5 @@
 
 package org.jetbrains.kotlin.sir
 
-/**
- * A marker interface that denotes Swift IR elements.
- */
-interface SirElement {
-}
\ No newline at end of file
+@DslMarker
+annotation class SwiftIrBuilderDsl
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrElementBase.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrElementBase.kt
new file mode 100644
index 0000000..830b72a
--- /dev/null
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrElementBase.kt
@@ -0,0 +1,15 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir
+
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+import org.jetbrains.kotlin.sir.visitors.SwiftIrVisitor
+
+sealed class SwiftIrElementBase : SwiftIrElement {
+    abstract override fun <R, D> accept(visitor: SwiftIrVisitor<R, D>, data: D): R
+
+    abstract override fun <E : SwiftIrElement, D> transform(transformer: SwiftIrTransformer<D>, data: D): E
+}
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrImplementationDetail.kt
similarity index 67%
copy from native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
copy to native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrImplementationDetail.kt
index b98c914..bff2e73 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftIrImplementationDetail.kt
@@ -5,8 +5,6 @@
 
 package org.jetbrains.kotlin.sir
 
-/**
- * A marker interface that denotes Swift IR elements.
- */
-interface SirElement {
-}
\ No newline at end of file
+@Suppress("unused")
+@RequiresOptIn(level = RequiresOptIn.Level.ERROR)
+annotation class SwiftIrImplementationDetail
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftVisibility.kt
similarity index 71%
copy from native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
copy to native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftVisibility.kt
index b98c914..4d470da 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirElement.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SwiftVisibility.kt
@@ -5,8 +5,10 @@
 
 package org.jetbrains.kotlin.sir
 
-/**
- * A marker interface that denotes Swift IR elements.
- */
-interface SirElement {
+enum class SwiftVisibility {
+    PRIVATE,
+    FILEPRIVATE,
+    INTERNAL,
+    PUBLIC,
+    PACKAGE,
 }
\ No newline at end of file
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/util/transform.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/util/transform.kt
new file mode 100644
index 0000000..b7580d1
--- /dev/null
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/util/transform.kt
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.util
+
+import org.jetbrains.kotlin.sir.SwiftIrElement
+import org.jetbrains.kotlin.sir.SwiftIrElementBase
+import org.jetbrains.kotlin.sir.visitors.SwiftIrTransformer
+
+// FIXME: Copy-pasted from FIR, use auto-generation instead.
+fun <T : SwiftIrElement, D> MutableList<T>.transformInPlace(transformer: SwiftIrTransformer<D>, data: D) {
+    val iterator = this.listIterator()
+    while (iterator.hasNext()) {
+        val next = iterator.next() as SwiftIrElementBase
+        val result = next.transform<T, D>(transformer, data)
+        if (result !== next) {
+            iterator.set(result)
+        }
+    }
+}
diff --git a/native/swift/sir/tree-generator/Readme.md b/native/swift/sir/tree-generator/Readme.md
new file mode 100644
index 0000000..9e94729
--- /dev/null
+++ b/native/swift/sir/tree-generator/Readme.md
@@ -0,0 +1 @@
+# Swift IR tree generator
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/build.gradle.kts b/native/swift/sir/tree-generator/build.gradle.kts
new file mode 100644
index 0000000..c0032bc
--- /dev/null
+++ b/native/swift/sir/tree-generator/build.gradle.kts
@@ -0,0 +1,25 @@
+plugins {
+    kotlin("jvm")
+    id("jps-compatible")
+    application
+}
+
+val runtimeOnly by configurations
+val compileOnly by configurations
+runtimeOnly.extendsFrom(compileOnly)
+
+dependencies {
+    implementation(project(":generators"))
+    implementation(project(":generators:tree-generator-common"))
+}
+
+application {
+    mainClass.set("org.jetbrains.kotlin.sir.tree.generator.MainKt")
+}
+
+sourceSets {
+    "main" {
+        projectDefault()
+    }
+    "test" {}
+}
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
new file mode 100644
index 0000000..fe6c661
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator
+
+import org.jetbrains.kotlin.sir.tree.generator.config.AbstractSwiftIrTreeBuilderConfigurator
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+
+class BuilderConfigurator(elements: List<Element>) : AbstractSwiftIrTreeBuilderConfigurator(elements) {
+
+    fun configure() = with(SwiftIrTree) {
+        // Use builder configurator DSL for fine-tuning the builder generation logic.
+        // See org.jetbrains.kotlin.fir.tree.generator.BuilderConfigurator for example usage
+    }
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/ImplementationConfigurator.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/ImplementationConfigurator.kt
new file mode 100644
index 0000000..70d6c38
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/ImplementationConfigurator.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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator
+
+import org.jetbrains.kotlin.generators.tree.traverseParents2
+import org.jetbrains.kotlin.sir.tree.generator.config.AbstractSwiftIrTreeImplementationConfigurator
+
+object ImplementationConfigurator : AbstractSwiftIrTreeImplementationConfigurator() {
+
+    fun configureImplementations(model: Model) {
+        configure()
+        generateDefaultImplementations(model.elements)
+        configureAllImplementations()
+    }
+
+    private fun configure() = with(SwiftIrTree) {
+        // Declare custom implementation classes, see org.jetbrains.kotlin.fir.tree.generator.ImplementationConfigurator
+    }
+
+    private fun configureAllImplementations() {
+        // Use configureFieldInAllImplementations to customize certain fields in all implementation classes
+        configureFieldInAllImplementations(
+            field = "parent",
+        ) {
+            isMutable(it)
+            isLateinit(it)
+        }
+    }
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Main.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Main.kt
new file mode 100644
index 0000000..5e9fb2c
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Main.kt
@@ -0,0 +1,84 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator
+
+import org.jetbrains.kotlin.generators.tree.InterfaceAndAbstractClassConfigurator
+import org.jetbrains.kotlin.generators.tree.addPureAbstractElement
+import org.jetbrains.kotlin.generators.tree.detectBaseTransformerTypes
+import org.jetbrains.kotlin.generators.tree.printer.printGeneratedType
+import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.printer.*
+import java.io.File
+
+const val BASE_PACKAGE = "org.jetbrains.kotlin.sir"
+
+typealias Model = org.jetbrains.kotlin.generators.tree.Model<Element>
+
+internal const val TREE_GENERATOR_README = "native/swift/sir/tree-generator/Readme.md"
+
+fun main(args: Array<String>) {
+    val generationPath = args.firstOrNull()?.let { File(it) }
+        ?: File("../../tree/gen").canonicalFile
+
+    val model = SwiftIrTree.build()
+
+    detectBaseTransformerTypes(model)
+    ImplementationConfigurator.configureImplementations(model)
+
+    val allImplementations = model.elements.flatMap { it.allImplementations }
+
+    InterfaceAndAbstractClassConfigurator(model.elements + allImplementations)
+        .configureInterfacesAndAbstractClasses()
+
+    addPureAbstractElement(model.elements, pureAbstractElementType)
+
+    BuilderConfigurator(model.elements).configure()
+
+    val previouslyGeneratedFiles = GeneratorsFileUtil.collectPreviouslyGeneratedFiles(generationPath)
+    val generatedFiles = buildList {
+        model.elements.mapTo(this) { element ->
+            printGeneratedType(generationPath, TREE_GENERATOR_README, element.packageName, element.typeName) {
+                ElementPrinter(this).printElement(element)
+            }
+        }
+
+        allImplementations.mapTo(this) { implementation ->
+            printGeneratedType(generationPath, TREE_GENERATOR_README, implementation.packageName, implementation.typeName) {
+                ImplementationPrinter(this).printImplementation(implementation)
+            }
+        }
+
+        allImplementations.mapNotNullTo(this) { implementation ->
+            implementation.builder?.let { builder ->
+                printGeneratedType(
+                    generationPath,
+                    TREE_GENERATOR_README,
+                    builder.packageName,
+                    builder.typeName,
+                    fileSuppressions = listOf("DuplicatedCode", "unused"),
+                ) {
+                    BuilderPrinter(this).printBuilder(builder)
+                }
+            }
+        }
+
+        add(
+            printGeneratedType(generationPath, TREE_GENERATOR_README, elementVisitorType.packageName, elementVisitorType.typeName) {
+                VisitorPrinter(this, elementVisitorType).printVisitor(model.elements)
+            }
+        )
+
+        add(
+            printGeneratedType(generationPath, TREE_GENERATOR_README, elementTransformerType.packageName, elementTransformerType.typeName) {
+                TransformerPrinter(this, elementTransformerType, model.rootElement).printVisitor(model.elements)
+            }
+        )
+    }
+    generatedFiles.forEach { GeneratorsFileUtil.writeFileIfContentChanged(it.file, it.newText, logNotChanged = false) }
+    GeneratorsFileUtil.removeExtraFilesFromPreviousGeneration(previouslyGeneratedFiles, generatedFiles.map { it.file })
+}
+
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt
new file mode 100644
index 0000000..716ec3e
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt
@@ -0,0 +1,141 @@
+/*
+ * 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.
+ */
+
+@file:Suppress("unused", "MemberVisibilityCanBePrivate")
+
+package org.jetbrains.kotlin.sir.tree.generator
+
+import org.jetbrains.kotlin.generators.tree.StandardTypes.string
+import org.jetbrains.kotlin.sir.tree.generator.config.AbstractSwiftIrTreeBuilder
+
+object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+
+    override val rootElement by sealedElement(name = "Element") {
+        kDoc = "The root interface of the Swift IR tree."
+    }
+
+    val module by element {
+        customParentInVisitor = rootElement
+        // TODO
+    }
+
+    val declarationParent by sealedElement()
+
+    val declarationContainer by sealedElement {
+        parent(declarationParent)
+        customParentInVisitor = rootElement
+
+        +listField("declarations", declaration)
+    }
+
+    val declaration by sealedElement {
+        customParentInVisitor = rootElement
+        +field("origin", originType)
+        +listField("attributes", attributeType)
+        +field("visibility", swiftVisibilityType)
+        +field("parent", declarationParent, mutable = true) {
+            needAcceptAndTransform = false
+            useInBaseTransformerDetection = false
+        }
+    }
+
+    val declarationWithName by sealedElement {
+        parent(declaration)
+
+        +field("name", string)
+    }
+
+    val namedTypeDeclaration by sealedElement {
+        parent(declarationWithName)
+    }
+
+    val typeAlias by element {
+        parent(namedTypeDeclaration)
+    }
+
+    val `class` by element {
+        customParentInVisitor = namedTypeDeclaration
+        parent(namedTypeDeclaration)
+        parent(declarationContainer)
+    }
+
+    val actor by element {
+        customParentInVisitor = namedTypeDeclaration
+        parent(namedTypeDeclaration)
+        parent(declarationContainer)
+    }
+
+    val struct by element {
+        customParentInVisitor = namedTypeDeclaration
+        parent(namedTypeDeclaration)
+        parent(declarationContainer)
+    }
+
+    val enum by element {
+        customParentInVisitor = namedTypeDeclaration
+        parent(namedTypeDeclaration)
+        parent(declarationContainer)
+
+        +listField("cases", enumCase)
+    }
+
+    val enumCase by element {
+        parent(declarationWithName)
+    }
+
+    val protocol by element {
+        customParentInVisitor = namedTypeDeclaration
+        parent(namedTypeDeclaration)
+        parent(declarationContainer)
+    }
+
+    val callable by sealedElement {
+        parent(declaration)
+    }
+
+    val function by element {
+        customParentInVisitor = callable
+        parent(callable)
+        parent(declarationWithName)
+    }
+
+    val init by element {
+        parent(callable)
+    }
+
+    val accessor by sealedElement {
+        parent(callable)
+    }
+
+    val getter by element {
+        parent(accessor)
+    }
+
+    val setter by element {
+        parent(accessor)
+    }
+
+    val accessorContainer by sealedElement {
+        customParentInVisitor = rootElement
+        +field("getter", getter)
+        +field("setter", setter, nullable = true)
+    }
+
+    val property by element {
+        customParentInVisitor = accessorContainer
+        parent(declarationWithName)
+        parent(accessorContainer)
+    }
+
+    val subscript by element {
+        customParentInVisitor = accessorContainer
+        parent(declaration)
+        parent(accessorContainer)
+    }
+
+    val expression by element {
+        customParentInVisitor = rootElement
+    }
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt
new file mode 100644
index 0000000..f22b8bf
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator
+
+import org.jetbrains.kotlin.generators.tree.TypeKind
+import org.jetbrains.kotlin.generators.tree.type
+
+val pureAbstractElementType = type(BASE_PACKAGE, "SwiftIrElementBase", TypeKind.Class)
+val swiftVisibilityType = type(BASE_PACKAGE, "SwiftVisibility", TypeKind.Class)
+val attributeType = type(BASE_PACKAGE, "Attribute", TypeKind.Class)
+val originType = type(BASE_PACKAGE, "Origin", TypeKind.Class)
+
+private const val VISITORS_PACKAGE = "$BASE_PACKAGE.visitors"
+
+val elementVisitorType = type(VISITORS_PACKAGE, "SwiftIrVisitor", TypeKind.Class)
+val elementTransformerType = type(VISITORS_PACKAGE, "SwiftIrTransformer", TypeKind.Class)
+
+val swiftIrImplementationDetailAnnotation = type(BASE_PACKAGE, "SwiftIrImplementationDetail", TypeKind.Class)
+val swiftIrBuilderDslAnnotation = type(BASE_PACKAGE, "SwiftIrBuilderDsl", TypeKind.Class)
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
new file mode 100644
index 0000000..3994948
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilder.kt
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.config
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.sir.tree.generator.Model
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.sir.tree.generator.model.ListField
+import org.jetbrains.kotlin.sir.tree.generator.model.SimpleField
+import org.jetbrains.kotlin.types.Variance
+import kotlin.properties.PropertyDelegateProvider
+import kotlin.properties.ReadOnlyProperty
+import kotlin.reflect.KProperty
+
+// TODO: This class was copy-pasted from the IR tree generator. It'd be good to factor out common parts.
+abstract class AbstractSwiftIrTreeBuilder {
+    private val configurationCallbacks = mutableListOf<() -> Element>()
+
+    abstract val rootElement: Element
+
+    private fun createElement(name: String? = null, isSealed: Boolean, initializer: Element.() -> Unit = {}): ElementDelegate {
+        val del = ElementDelegate(name, isSealed)
+        configurationCallbacks.add {
+            del.element!!.apply {
+                initializer()
+                if (elementParents.isEmpty() && this != rootElement) {
+                    elementParents.add(ElementRef(rootElement))
+                }
+            }
+        }
+        return del
+    }
+
+    fun element(name: String? = null, initializer: Element.() -> Unit = {}) =
+        createElement(name, isSealed = false, initializer)
+
+    fun sealedElement(name: String? = null, initializer: Element.() -> Unit = {}) =
+        createElement(name, isSealed = true, initializer)
+
+    protected fun Element.parent(type: ClassRef<*>) {
+        otherParents.add(type)
+    }
+
+    protected fun Element.parent(type: ElementOrRef<Element>) {
+        elementParents.add(ElementRef(type.element, type.args, type.nullable))
+    }
+
+    protected fun param(name: String, vararg bounds: TypeRef, variance: Variance = Variance.INVARIANT): TypeVariable {
+        return TypeVariable(name, bounds.toList(), variance)
+    }
+
+    protected fun field(
+        name: String,
+        type: TypeRefWithNullability,
+        nullable: Boolean = false,
+        mutable: Boolean = false,
+        initializer: SimpleField.() -> Unit = {}
+    ): SimpleField {
+        return SimpleField(name, type.copy(nullable), mutable).apply(initializer)
+    }
+
+    protected fun listField(
+        name: String,
+        baseType: TypeRef,
+        initializer: ListField.() -> Unit = {}
+    ): ListField {
+        return ListField(
+            name = name,
+            baseType = baseType,
+            isMutable = false,
+        ).apply(initializer)
+    }
+
+    fun build(): Model {
+        val elements = configurationCallbacks.map { it() }
+        return Model(elements, rootElement)
+    }
+}
+
+class ElementDelegate(
+    private val name: String?,
+    private val isSealed: Boolean,
+) : ReadOnlyProperty<AbstractSwiftIrTreeBuilder, Element>, PropertyDelegateProvider<AbstractSwiftIrTreeBuilder, ElementDelegate> {
+    var element: Element? = null
+        private set
+
+    override fun getValue(thisRef: AbstractSwiftIrTreeBuilder, property: KProperty<*>): Element {
+        return element!!
+    }
+
+    override fun provideDelegate(thisRef: AbstractSwiftIrTreeBuilder, property: KProperty<*>): ElementDelegate {
+        val path = thisRef.javaClass.name + "." + property.name
+        element = Element(name ?: property.name.replaceFirstChar(Char::uppercaseChar), path).also {
+            it.isSealed = isSealed
+        }
+        return this
+    }
+}
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilderConfigurator.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilderConfigurator.kt
new file mode 100644
index 0000000..2cab9c3
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeBuilderConfigurator.kt
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.config
+
+import org.jetbrains.kotlin.generators.tree.AbstractBuilderConfigurator
+import org.jetbrains.kotlin.sir.tree.generator.BASE_PACKAGE
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.sir.tree.generator.model.Implementation
+
+abstract class AbstractSwiftIrTreeBuilderConfigurator(
+    elements: List<Element>
+) : AbstractBuilderConfigurator<Element, Implementation, Field, Field>(elements) {
+
+    override val namePrefix: String
+        get() = "SwiftIr"
+
+    override val defaultBuilderPackage: String
+        get() = "$BASE_PACKAGE.builder"
+
+    override fun builderFieldFromElementField(elementField: Field) = elementField.copy()
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeImplementationConfigurator.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeImplementationConfigurator.kt
new file mode 100644
index 0000000..64d50f6
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/config/AbstractSwiftIrTreeImplementationConfigurator.kt
@@ -0,0 +1,15 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.config
+
+import org.jetbrains.kotlin.generators.tree.AbstractImplementationConfigurator
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.sir.tree.generator.model.Implementation
+
+abstract class AbstractSwiftIrTreeImplementationConfigurator : AbstractImplementationConfigurator<Implementation, Element, Field>() {
+    override fun createImplementation(element: Element, name: String?) = Implementation(element, name)
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Element.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Element.kt
new file mode 100644
index 0000000..7264237
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Element.kt
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.model
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.sir.tree.generator.BASE_PACKAGE
+
+class Element(name: String, override val propertyName: String) : AbstractElement<Element, Field, Implementation>(name) {
+
+    override var kDoc: String? = null
+
+    override val fields: MutableSet<Field> = mutableSetOf()
+
+    override val params: MutableList<TypeVariable> = mutableListOf()
+
+    override val elementParents: MutableList<ElementRef<Element>> = mutableListOf()
+
+    override val otherParents: MutableList<ClassRef<*>> = mutableListOf()
+
+    override val visitorParameterName: String = when (val parameterName = name.replaceFirstChar(Char::lowercaseChar)) {
+        "class" -> "klass"
+        else -> parameterName
+    }
+
+    override val hasAcceptMethod: Boolean
+        get() = true
+
+    override val hasTransformMethod: Boolean
+        get() = true
+
+    override val hasAcceptChildrenMethod: Boolean
+        get() = isRootElement
+
+    override val hasTransformChildrenMethod: Boolean
+        get() = isRootElement
+
+    override var kind: ImplementationKind? = null
+
+    override val namePrefix: String
+        get() = "SwiftIr"
+
+    override val packageName: String
+        get() = BASE_PACKAGE
+
+    override val element: Element
+        get() = this
+
+    override val nullable: Boolean
+        get() = false
+
+    override val args: Map<NamedTypeParameterRef, TypeRef>
+        get() = emptyMap()
+
+    operator fun Field.unaryPlus(): Field {
+        fields.add(this)
+        return this
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..5d40df5
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Field.kt
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.model
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.generators.tree.ListField
+
+abstract class Field(
+    override val name: String,
+    override var isMutable: Boolean
+) : AbstractField<Field>(), AbstractFieldWithDefaultValue<Field> {
+
+    override val origin: Field
+        get() = this
+
+    override var notNull: Boolean = false
+
+    override var withGetter: Boolean = false
+
+    override var customSetter: String? = null
+
+    override var defaultValueInImplementation: String? = null
+
+    override var defaultValueInBuilder: String? = null
+
+    override val isVolatile: Boolean
+        get() = false
+
+    override var isFinal: Boolean = false
+
+    override val isParameter: Boolean
+        get() = false
+
+    abstract fun internalCopy(): Field
+
+    override fun copy() = internalCopy().also(::updateFieldsInCopy)
+
+    override fun updateFieldsInCopy(copy: Field) {
+        super.updateFieldsInCopy(copy)
+        copy.notNull = notNull
+        copy.withGetter = withGetter
+        copy.customSetter = customSetter
+        copy.defaultValueInImplementation = defaultValueInImplementation
+        copy.isFinal = isFinal
+    }
+}
+
+class SimpleField(
+    name: String,
+    override val typeRef: TypeRefWithNullability,
+    isMutable: Boolean,
+) : Field(name, isMutable) {
+
+    override fun internalCopy() = SimpleField(name, typeRef, isMutable)
+
+    override fun replaceType(newType: TypeRefWithNullability) = SimpleField(name, newType, isMutable).also(::updateFieldsInCopy)
+}
+
+class ListField(
+    name: String,
+    override val baseType: TypeRef,
+    isMutable: Boolean,
+) : Field(name, isMutable), ListField {
+
+    override val typeRef: ClassRef<PositionTypeParameterRef>
+        get() = super.typeRef
+
+    override val listType: ClassRef<PositionTypeParameterRef>
+        get() = StandardTypes.list
+
+    override fun internalCopy() = ListField(name, baseType, isMutable)
+
+    override fun replaceType(newType: TypeRefWithNullability) = internalCopy().also(::updateFieldsInCopy)
+}
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Implementation.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Implementation.kt
new file mode 100644
index 0000000..5d12285
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/model/Implementation.kt
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.model
+
+import org.jetbrains.kotlin.generators.tree.AbstractImplementation
+import org.jetbrains.kotlin.generators.tree.ImplementationKind
+
+class Implementation(element: Element, name: String?) : AbstractImplementation<Implementation, Element, Field>(element, name) {
+
+    override val allFields: List<Field> = element.allFields.map { it.copy() }
+
+    override val namePrefix: String
+        get() = "SwiftIr"
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/BuilderPrinter.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/BuilderPrinter.kt
new file mode 100644
index 0000000..af78888
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/BuilderPrinter.kt
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.printer
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.sir.tree.generator.model.Implementation
+import org.jetbrains.kotlin.sir.tree.generator.model.ListField
+import org.jetbrains.kotlin.sir.tree.generator.swiftIrBuilderDslAnnotation
+import org.jetbrains.kotlin.sir.tree.generator.swiftIrImplementationDetailAnnotation
+import org.jetbrains.kotlin.utils.SmartPrinter
+
+class BuilderPrinter(printer: SmartPrinter) : AbstractBuilderPrinter<Field, Field, Element, Implementation>(printer) {
+
+    override val implementationDetailAnnotation: ClassRef<*>
+        get() = swiftIrImplementationDetailAnnotation
+
+    override val builderDslAnnotation: ClassRef<*>
+        get() = swiftIrBuilderDslAnnotation
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/ElementPrinter.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/ElementPrinter.kt
new file mode 100644
index 0000000..96a9c46
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/ElementPrinter.kt
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.printer
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.generators.tree.printer.*
+import org.jetbrains.kotlin.sir.tree.generator.BASE_PACKAGE
+import org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.sir.tree.generator.elementTransformerType
+import org.jetbrains.kotlin.sir.tree.generator.elementVisitorType
+import org.jetbrains.kotlin.sir.tree.generator.model.SimpleField
+import org.jetbrains.kotlin.utils.SmartPrinter
+
+internal class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Element, Field>(printer) {
+
+    override fun makeFieldPrinter(printer: SmartPrinter) = object : AbstractFieldPrinter<Field>(printer) {
+        override fun forceMutable(field: Field): Boolean = field.isMutable
+    }
+
+    context(ImportCollector)
+    override fun SmartPrinter.printAdditionalMethods(element: Element) {
+        val treeName = "Swift IR"
+        if (element.isRootElement || element.parentInVisitor != null) {
+            printAcceptMethod(element, elementVisitorType, hasImplementation = !element.isRootElement, treeName)
+            printTransformMethod(
+                element,
+                elementTransformerType,
+                implementation = "transformer.transform${element.name}(this, data)",
+                returnType = TypeVariable("E", listOf(SwiftIrTree.rootElement)),
+                treeName
+            )
+        }
+
+        if (element.isRootElement) {
+            printAcceptChildrenMethod(element, elementVisitorType, TypeVariable("R"))
+            println()
+            printTransformChildrenMethod(element, elementTransformerType, StandardTypes.unit)
+            println()
+        }
+    }
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/ImplementationPrinter.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/ImplementationPrinter.kt
new file mode 100644
index 0000000..f46c386
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/ImplementationPrinter.kt
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.printer
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.generators.tree.printer.printAcceptChildrenMethod
+import org.jetbrains.kotlin.generators.tree.printer.printBlock
+import org.jetbrains.kotlin.generators.tree.printer.printTransformChildrenMethod
+import org.jetbrains.kotlin.sir.tree.generator.BASE_PACKAGE
+import org.jetbrains.kotlin.sir.tree.generator.elementTransformerType
+import org.jetbrains.kotlin.sir.tree.generator.elementVisitorType
+import org.jetbrains.kotlin.sir.tree.generator.model.*
+import org.jetbrains.kotlin.sir.tree.generator.model.ListField
+import org.jetbrains.kotlin.sir.tree.generator.swiftIrImplementationDetailAnnotation
+import org.jetbrains.kotlin.utils.SmartPrinter
+
+class ImplementationPrinter(printer: SmartPrinter) : AbstractImplementationPrinter<Implementation, Element, Field>(printer) {
+
+    companion object {
+        private val transformInPlace = ArbitraryImportable("$BASE_PACKAGE.util", "transformInPlace")
+    }
+
+    override val implementationOptInAnnotation: ClassRef<*>
+        get() = swiftIrImplementationDetailAnnotation
+
+    override val pureAbstractElementType: ClassRef<*>
+        get() = org.jetbrains.kotlin.sir.tree.generator.pureAbstractElementType
+
+    override fun makeFieldPrinter(printer: SmartPrinter) = object : AbstractFieldPrinter<Field>(printer) {
+
+        override fun forceMutable(field: Field) = field.isMutable
+
+        override fun actualTypeOfField(field: Field): TypeRefWithNullability {
+            if (field is ListField) return StandardTypes.mutableList.withArgs(field.baseType)
+            return field.typeRef
+        }
+    }
+
+    context(ImportCollector)
+    override fun SmartPrinter.printAdditionalMethods(implementation: Implementation) {
+
+        if (implementation.hasAcceptChildrenMethod) {
+            printAcceptChildrenMethod(implementation, elementVisitorType, TypeVariable("R"), override = true)
+            printBlock {
+                // TODO: This is copy-pasted from the IR generator. Factor this out.
+                for (child in implementation.walkableChildren) {
+                    print(child.name)
+                    if (child.nullable) {
+                        print("?")
+                    }
+                    when (child) {
+                        is SimpleField -> println(".accept(visitor, data)")
+                        is ListField -> {
+                            print(".forEach { it")
+                            if (child.baseType.nullable) {
+                                print("?")
+                            }
+                            println(".accept(visitor, data) }")
+                        }
+                    }
+                }
+            }
+        }
+
+        if (implementation.hasTransformChildrenMethod) {
+            printTransformChildrenMethod(implementation, elementTransformerType, StandardTypes.unit, override = true)
+            printBlock {
+                // TODO: This is copy-pasted from the IR generator. Factor this out.
+                for (child in implementation.transformableChildren) {
+                    print(child.name)
+                    when (child) {
+                        is SimpleField -> {
+                            print(" = ", child.name)
+                            if (child.nullable) {
+                                print("?")
+                            }
+                            print(".transform(transformer, data)")
+                            val elementRef = child.typeRef as ElementRef<*>
+                            if (!elementRef.element.hasTransformMethod) {
+                                print(" as ", elementRef.render())
+                            }
+                            println()
+                        }
+                        is ListField -> {
+                            addImport(transformInPlace)
+                            println(".transformInPlace(transformer, data)")
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/TransformerPrinter.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/TransformerPrinter.kt
new file mode 100644
index 0000000..31a3665
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/TransformerPrinter.kt
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.printer
+
+import org.jetbrains.kotlin.descriptors.Modality
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.generators.tree.printer.FunctionParameter
+import org.jetbrains.kotlin.generators.tree.printer.printBlock
+import org.jetbrains.kotlin.generators.tree.printer.printFunctionDeclaration
+import org.jetbrains.kotlin.generators.tree.printer.printFunctionWithBlockBody
+import org.jetbrains.kotlin.sir.tree.generator.elementVisitorType
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.utils.SmartPrinter
+
+internal class TransformerPrinter(
+    printer: SmartPrinter,
+    override val visitorType: ClassRef<*>,
+    private val rootElement: Element,
+) : AbstractVisitorPrinter<Element, Field>(printer) {
+
+    override val visitorSuperType: ClassRef<PositionTypeParameterRef>
+        get() = elementVisitorType.withArgs(rootElement, dataTypeVariable)
+
+    override val visitorTypeParameters: List<TypeVariable>
+        get() = listOf(dataTypeVariable)
+
+    override val visitorDataType: TypeRef
+        get() = dataTypeVariable
+
+    override fun visitMethodReturnType(element: Element) = element.transformerClass
+
+    context(ImportCollector)
+    override fun printMethodsForElement(element: Element) {
+        // FIXME: This code is copy-pasted from the FIR generator. Factor it out.
+        printer.run {
+            println()
+            val elementParameterName = element.visitorParameterName
+            if (element.isRootElement) {
+                val elementTP = TypeVariable("E", listOf(element))
+                printFunctionDeclaration(
+                    name = "transformElement",
+                    parameters = listOf(
+                        FunctionParameter(elementParameterName, elementTP),
+                        FunctionParameter("data", dataTypeVariable)
+                    ),
+                    returnType = elementTP,
+                    typeParameters = listOf(elementTP),
+                    modality = Modality.ABSTRACT,
+                )
+                println()
+            } else {
+                if (element.parentInVisitor == null) return
+                printFunctionWithBlockBody(
+                    name = "transform" + element.name,
+                    parameters = listOf(
+                        FunctionParameter(elementParameterName, element),
+                        FunctionParameter("data", dataTypeVariable)
+                    ),
+                    returnType = visitMethodReturnType(element),
+                    typeParameters = element.params,
+                    modality = Modality.OPEN,
+                ) {
+                    println("return transformElement(", elementParameterName, ", data)")
+                }
+            }
+            println()
+            printVisitMethodDeclaration(
+                element = element,
+                modality = Modality.FINAL,
+                override = true,
+            )
+            printBlock {
+                println(
+                    "return transform",
+                    element.name,
+                    "(",
+                    elementParameterName,
+                    ", ",
+                    "data)"
+                )
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/VisitorPrinter.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/VisitorPrinter.kt
new file mode 100644
index 0000000..73bd2ee
--- /dev/null
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/printer/VisitorPrinter.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.
+ */
+
+package org.jetbrains.kotlin.sir.tree.generator.printer
+
+import org.jetbrains.kotlin.generators.tree.*
+import org.jetbrains.kotlin.sir.tree.generator.model.Element
+import org.jetbrains.kotlin.sir.tree.generator.model.Field
+import org.jetbrains.kotlin.utils.SmartPrinter
+
+internal class VisitorPrinter(
+    printer: SmartPrinter,
+    override val visitorType: ClassRef<*>
+) : AbstractVisitorPrinter<Element, Field>(printer) {
+
+    override val visitorTypeParameters: List<TypeVariable>
+        get() = listOf(resultTypeVariable, dataTypeVariable)
+
+    override val visitorDataType: TypeRef
+        get() = dataTypeVariable
+
+    override fun visitMethodReturnType(element: Element) = resultTypeVariable
+
+    override val visitorSuperType: ClassRef<PositionTypeParameterRef>?
+        get() = null
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 9081cb4..b605e31 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -399,6 +399,7 @@
 
 // Swift Export modules
 include ":native:swift:sir",
+        ":native:swift:sir:tree-generator",
         ":native:swift:sir-passes",
         ":native:swift:sir-analysis-api"