KT-72450: fix crash on additional trampouline creation during BridgeGenerationRequest generation ^KT-72450 fixed
diff --git a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/SirSession.kt b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/SirSession.kt
index f27b733..1142d45 100644
--- a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/SirSession.kt
+++ b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/SirSession.kt
@@ -84,6 +84,8 @@
 
     override fun KaScope.extractDeclarations(ktAnalysisSession: KaSession): Sequence<SirDeclaration> =
         with(childrenProvider) { this@extractDeclarations.extractDeclarations(ktAnalysisSession) }
+
+    override fun forbidFurtherTrampolineGenerations(): Unit = trampolineDeclarationsProvider.forbidFurtherTrampolineGenerations()
 }
 
 /**
@@ -125,6 +127,7 @@
  */
 public interface SirTrampolineDeclarationsProvider {
     public fun SirDeclaration.trampolineDeclarations(): List<SirDeclaration>
+    public fun forbidFurtherTrampolineGenerations()
 }
 
 /**
diff --git a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/PackageFlatteningSirDeclarationProvider.kt b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/PackageFlatteningSirDeclarationProvider.kt
index 7eab1a1..52a7a30 100644
--- a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/PackageFlatteningSirDeclarationProvider.kt
+++ b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/PackageFlatteningSirDeclarationProvider.kt
@@ -17,14 +17,18 @@
     private val sirSession: SirSession,
     private val targetPackageFqName: FqName?,
 ) : SirTrampolineDeclarationsProvider {
+    private var isNewGenerationsAllowed = true
     private val generatedDeclarations: MutableMap<SirDeclaration, List<SirDeclaration>> = mutableMapOf()
 
     override fun SirDeclaration.trampolineDeclarations(): List<SirDeclaration> = generateDeclarations(this)
 
-    private fun generateDeclarations(declaration: SirDeclaration): List<SirDeclaration> = generatedDeclarations.getOrPut(declaration) {
-        if (targetPackageFqName == null)
-            return emptyList()
+    override fun forbidFurtherTrampolineGenerations() {
+        isNewGenerationsAllowed = false
+    }
 
+    private fun generateDeclarations(declaration: SirDeclaration): List<SirDeclaration> = generatedDeclarations.getOrPut(declaration) {
+        if (targetPackageFqName == null || !isNewGenerationsAllowed)
+            return emptyList()
 
         with(sirSession) {
             val targetEnum = if (declaration is SirEnum && declaration.isNamespace(targetPackageFqName)) {
diff --git a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportRunner.kt b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportRunner.kt
index 7e8199a..e498f04 100644
--- a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportRunner.kt
+++ b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportRunner.kt
@@ -17,7 +17,6 @@
 import org.jetbrains.kotlin.sir.providers.SirTypeProvider
 import org.jetbrains.kotlin.sir.providers.impl.SirEnumGeneratorImpl
 import org.jetbrains.kotlin.sir.providers.impl.SirOneToOneModuleProvider
-import org.jetbrains.kotlin.sir.providers.impl.SirSingleModuleProvider
 import org.jetbrains.kotlin.sir.providers.source.KotlinSource
 import org.jetbrains.kotlin.sir.providers.utils.*
 import org.jetbrains.kotlin.sir.util.SirSwiftModule
diff --git a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildSwiftModule.kt b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildSwiftModule.kt
index 6ed3a4d..5cbe192 100644
--- a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildSwiftModule.kt
+++ b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildSwiftModule.kt
@@ -76,6 +76,7 @@
             }
         }
     }
+    sirSession.forbidFurtherTrampolineGenerations()
 }
 
 /**
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/ExportedKotlinPackages/ExportedKotlinPackages.swift b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/ExportedKotlinPackages/ExportedKotlinPackages.swift
new file mode 100644
index 0000000..6d2efb3
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/ExportedKotlinPackages/ExportedKotlinPackages.swift
@@ -0,0 +1,6 @@
+public enum namespace {
+    public enum demo {
+    }
+    public enum modulea {
+    }
+}
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.h b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.h
new file mode 100644
index 0000000..d7ef3b4
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.h
@@ -0,0 +1,5 @@
+#include <Foundation/Foundation.h>
+#include <stdint.h>
+
+uintptr_t namespace_demo_useClassFromA();
+
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.kt b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.kt
new file mode 100644
index 0000000..7164287
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.kt
@@ -0,0 +1,11 @@
+@file:kotlin.Suppress("DEPRECATION_ERROR")
+
+import kotlin.native.internal.ExportedBridge
+import kotlinx.cinterop.*
+
+@ExportedBridge("namespace_demo_useClassFromA")
+public fun namespace_demo_useClassFromA(): kotlin.native.internal.NativePtr {
+    val _result = namespace.demo.useClassFromA()
+    return kotlin.native.internal.ref.createRetainedExternalRCRef(_result)
+}
+
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.swift b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.swift
new file mode 100644
index 0000000..4496321
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/common/common.swift
@@ -0,0 +1,10 @@
+@_exported import ExportedKotlinPackages
+@_implementationOnly import KotlinBridges_common
+import modulea
+
+public typealias demo = ExportedKotlinPackages.namespace.demo
+public extension ExportedKotlinPackages.namespace.demo {
+    public static func useClassFromA() -> ExportedKotlinPackages.namespace.modulea.ClassFromA {
+        return ExportedKotlinPackages.namespace.modulea.ClassFromA(__externalRCRef: namespace_demo_useClassFromA())
+    }
+}
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.h b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.h
new file mode 100644
index 0000000..e09df3a
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.h
@@ -0,0 +1,7 @@
+#include <Foundation/Foundation.h>
+#include <stdint.h>
+
+uintptr_t namespace_modulea_ClassFromA_init_allocate();
+
+void namespace_modulea_ClassFromA_init_initialize__TypesOfArguments__Swift_UInt__(uintptr_t __kt);
+
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.kt b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.kt
new file mode 100644
index 0000000..69a693a
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.kt
@@ -0,0 +1,18 @@
+@file:kotlin.Suppress("DEPRECATION_ERROR")
+@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.modulea.ClassFromA::class, "22ExportedKotlinPackages9namespaceO7moduleaO7moduleaE10ClassFromAC")
+
+import kotlin.native.internal.ExportedBridge
+import kotlinx.cinterop.*
+
+@ExportedBridge("namespace_modulea_ClassFromA_init_allocate")
+public fun namespace_modulea_ClassFromA_init_allocate(): kotlin.native.internal.NativePtr {
+    val _result = kotlin.native.internal.createUninitializedInstance<namespace.modulea.ClassFromA>()
+    return kotlin.native.internal.ref.createRetainedExternalRCRef(_result)
+}
+
+@ExportedBridge("namespace_modulea_ClassFromA_init_initialize__TypesOfArguments__Swift_UInt__")
+public fun namespace_modulea_ClassFromA_init_initialize__TypesOfArguments__Swift_UInt__(__kt: kotlin.native.internal.NativePtr): Unit {
+    val ____kt = kotlin.native.internal.ref.dereferenceExternalRCRef(__kt)
+    kotlin.native.internal.initInstance(____kt, namespace.modulea.ClassFromA())
+}
+
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.swift b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.swift
new file mode 100644
index 0000000..c3116d2
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/golden_result/modulea/modulea.swift
@@ -0,0 +1,19 @@
+@_exported import ExportedKotlinPackages
+@_implementationOnly import KotlinBridges_modulea
+import KotlinRuntime
+
+public typealias ClassFromA = ExportedKotlinPackages.namespace.modulea.ClassFromA
+public extension ExportedKotlinPackages.namespace.modulea {
+    public final class ClassFromA: KotlinRuntime.KotlinBase {
+        public override init() {
+            let __kt = namespace_modulea_ClassFromA_init_allocate()
+            super.init(__externalRCRef: __kt)
+            namespace_modulea_ClassFromA_init_initialize__TypesOfArguments__Swift_UInt__(__kt)
+        }
+        package override init(
+            __externalRCRef: Swift.UInt
+        ) {
+            super.init(__externalRCRef: __externalRCRef)
+        }
+    }
+}
diff --git a/native/swift/swift-export-standalone/testData/generation/kt-72450/kt-72450.kt b/native/swift/swift-export-standalone/testData/generation/kt-72450/kt-72450.kt
new file mode 100644
index 0000000..f09eb0b
--- /dev/null
+++ b/native/swift/swift-export-standalone/testData/generation/kt-72450/kt-72450.kt
@@ -0,0 +1,17 @@
+// KIND: STANDALONE
+// MODULE: common(modulea)
+// SWIFT_EXPORT_CONFIG: packageRoot=namespace
+// FILE: main.kt
+package namespace.demo
+
+import namespace.modulea.ClassFromA
+
+fun useClassFromA(): ClassFromA = TODO()
+
+
+// MODULE: modulea()
+// SWIFT_EXPORT_CONFIG: packageRoot=namespace.modulea
+// FILE: moduleA.kt
+package namespace.modulea
+
+class ClassFromA
\ No newline at end of file
diff --git a/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/KlibBasedSwiftExportRunnerTest.java b/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/KlibBasedSwiftExportRunnerTest.java
index 119c6fe..1c2bf3e 100644
--- a/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/KlibBasedSwiftExportRunnerTest.java
+++ b/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/KlibBasedSwiftExportRunnerTest.java
@@ -100,6 +100,12 @@
   }
 
   @Test
+  @TestMetadata("kt-72450")
+  public void testKt_72450() {
+    runTest("native/swift/swift-export-standalone/testData/generation/kt-72450/");
+  }
+
+  @Test
   @TestMetadata("list")
   public void testList() {
     runTest("native/swift/swift-export-standalone/testData/generation/list/");