[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"