[Swift Export] Add TypeBindingBridge with Kotlin<->Swift type mapping. ^KT-70678
diff --git a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/BridgeGenerator.kt b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/BridgeGenerator.kt index b8a606c..a5cfd30 100644 --- a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/BridgeGenerator.kt +++ b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/BridgeGenerator.kt
@@ -69,6 +69,25 @@ ) /** + * A mapping from Kotlin class to a corresponding [Swift class][sirClass]. + */ +public class TypeBindingBridgeRequest( + public val sirClass: SirClass, +) : BridgeRequest + +/** + * Bridge that implements mapping from Kotlin type name to Swift type name. + * + * @see TypeBindingBridgeRequest + */ +public class TypeBindingBridge( + /** + * File-level annotation to be placed on the generated Kotlin bridge. + */ + public val kotlinFileAnnotation: String, +) : GeneratedBridge + +/** * Generates various [GeneratedBridge]s given various [BridgeRequest]s */ public interface BridgeGenerator {
diff --git a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/StableBridgeRequestComparator.kt b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/StableBridgeRequestComparator.kt index 1a34c2e..b19df84 100644 --- a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/StableBridgeRequestComparator.kt +++ b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/StableBridgeRequestComparator.kt
@@ -5,6 +5,8 @@ package org.jetbrains.kotlin.sir.bridge +import org.jetbrains.kotlin.sir.util.swiftFqName + public object StableBridgeRequestComparator : Comparator<BridgeRequest> { override fun compare( lhs: BridgeRequest, @@ -13,6 +15,13 @@ is FunctionBridgeRequest -> { when (rhs) { is FunctionBridgeRequest -> lhs.bridgeName.compareTo(rhs.bridgeName) + is TypeBindingBridgeRequest -> 1 + } + } + is TypeBindingBridgeRequest -> { + when (rhs) { + is FunctionBridgeRequest -> -1 + is TypeBindingBridgeRequest -> lhs.sirClass.swiftFqName.compareTo(rhs.sirClass.swiftFqName) } } }
diff --git a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt index 2d7e50e6..b40815a 100644 --- a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt +++ b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/BridgeGeneratorImpl.kt
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.sir.* import org.jetbrains.kotlin.sir.bridge.* +import org.jetbrains.kotlin.sir.mangler.mangledNameOrNull import org.jetbrains.kotlin.sir.util.* private const val exportAnnotationFqName = "kotlin.native.internal.ExportedBridge" @@ -17,6 +18,7 @@ internal class BridgeGeneratorImpl(private val typeNamer: SirTypeNamer) : BridgeGenerator { override fun generateBridges(request: BridgeRequest): List<GeneratedBridge> = when (request) { is FunctionBridgeRequest -> generateFunctionBridges(request) + is TypeBindingBridgeRequest -> listOf(generateTypeBindingBridge(request)) } private fun generateFunctionBridges(request: FunctionBridgeRequest) = buildList { @@ -71,6 +73,18 @@ } } }) + + private fun generateTypeBindingBridge(request: TypeBindingBridgeRequest): TypeBindingBridge { + val annotationName = "kotlin.native.internal.objc.BindClassToObjCName" + val kotlinType = typeNamer.kotlinFqName(SirNominalType(request.sirClass)) + val swiftName = request.sirClass.mangledNameOrNull + requireNotNull(swiftName) { + "Cannot mangle name for Swift class exported from `$kotlinType`" + } + return TypeBindingBridge( + kotlinFileAnnotation = "$annotationName($kotlinType::class, \"$swiftName\")" + ) + } } private class BridgeFunctionDescriptor(
diff --git a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/CHeaderGenerator.kt b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/CHeaderGenerator.kt index b21bfa3..0b5928fb 100644 --- a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/CHeaderGenerator.kt +++ b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/CHeaderGenerator.kt
@@ -8,6 +8,7 @@ import org.jetbrains.kotlin.sir.bridge.BridgePrinter import org.jetbrains.kotlin.sir.bridge.FunctionBridge import org.jetbrains.kotlin.sir.bridge.GeneratedBridge +import org.jetbrains.kotlin.sir.bridge.TypeBindingBridge internal class CBridgePrinter : BridgePrinter { @@ -18,6 +19,7 @@ override fun add(bridge: GeneratedBridge) { when (bridge) { is FunctionBridge -> add(bridge) + is TypeBindingBridge -> Unit } }
diff --git a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/KotlinFileGenerator.kt b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/KotlinFileGenerator.kt index 1cab91c..3f1ba21 100644 --- a/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/KotlinFileGenerator.kt +++ b/native/swift/sir-compiler-bridge/src/org/jetbrains/kotlin/sir/bridge/impl/KotlinFileGenerator.kt
@@ -8,15 +8,18 @@ import org.jetbrains.kotlin.sir.bridge.BridgePrinter import org.jetbrains.kotlin.sir.bridge.FunctionBridge import org.jetbrains.kotlin.sir.bridge.GeneratedBridge +import org.jetbrains.kotlin.sir.bridge.TypeBindingBridge internal class KotlinBridgePrinter : BridgePrinter { private val imports = mutableSetOf<String>() private val functions = mutableSetOf<List<String>>() + private val fileLevelAnnotations = mutableSetOf<String>() override fun add(bridge: GeneratedBridge) { when (bridge) { is FunctionBridge -> add(bridge) + is TypeBindingBridge -> add(bridge) } } @@ -25,7 +28,17 @@ imports += bridge.kotlinFunctionBridge.packageDependencies } + private fun add(bridge: TypeBindingBridge) { + fileLevelAnnotations += bridge.kotlinFileAnnotation + } + override fun print(): Sequence<String> = sequence { + if (fileLevelAnnotations.isNotEmpty()) { + fileLevelAnnotations.forEach { + yield("@file:$it") + } + yield("") + } if (imports.isNotEmpty()) { imports.forEach { yield("import $it")
diff --git a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildBridgeRequests.kt b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildBridgeRequests.kt index 48f4fe1..b514f0c 100644 --- a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildBridgeRequests.kt +++ b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildBridgeRequests.kt
@@ -29,6 +29,11 @@ ) addAll( container + .allClasses() + .flatMap { it.constructTypeBindingBridgeRequests(generator) } + ) + addAll( + container .allContainers() .flatMap { buildBridgeRequests(generator, it) } )
diff --git a/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildTypeBindingBridges.kt b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildTypeBindingBridges.kt new file mode 100644 index 0000000..c630168 --- /dev/null +++ b/native/swift/swift-export-standalone/src/org/jetbrains/kotlin/swiftexport/standalone/builders/buildTypeBindingBridges.kt
@@ -0,0 +1,19 @@ +/* + * Copyright 2010-2024 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.swiftexport.standalone.builders + +import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol +import org.jetbrains.kotlin.sir.SirClass +import org.jetbrains.kotlin.sir.bridge.BridgeGenerator +import org.jetbrains.kotlin.sir.bridge.TypeBindingBridgeRequest +import org.jetbrains.kotlin.sir.providers.source.KotlinSource + +internal fun SirClass.constructTypeBindingBridgeRequests(generator: BridgeGenerator): List<TypeBindingBridgeRequest> { + // `SirClass` must be generated from Kotlin sources, and be a named class. + (origin as? KotlinSource)?.symbol as? KaNamedClassSymbol ?: return emptyList() + + return listOf(TypeBindingBridgeRequest(this)) +} \ No newline at end of file
diff --git a/native/swift/swift-export-standalone/testData/execution/classMappings/classMappings.kt b/native/swift/swift-export-standalone/testData/execution/classMappings/classMappings.kt new file mode 100644 index 0000000..567664c --- /dev/null +++ b/native/swift/swift-export-standalone/testData/execution/classMappings/classMappings.kt
@@ -0,0 +1,26 @@ +// KIND: STANDALONE +// FREE_COMPILER_ARGS: -opt-in=kotlin.native.internal.InternalForKotlinNative +// MODULE: ClassMappings +// FILE: classes.kt +import kotlin.native.internal.reflect.objCNameOrNull + +class FinalClass { + class NestedFinalClass +} +open class OpenClass +private class PrivateClass : OpenClass() + +fun getAnyClassName(): String? = Any::class.objCNameOrNull +fun getFinalClassName(): String? = FinalClass::class.objCNameOrNull +fun getNestedFinalClassName(): String? = FinalClass.NestedFinalClass::class.objCNameOrNull +fun getOpenClassName(): String? = OpenClass::class.objCNameOrNull +fun getPrivateClassName(): String? = PrivateClass::class.objCNameOrNull + +// FILE: classes_in_namespace.kt +package namespace + +import kotlin.native.internal.reflect.objCNameOrNull + +class NamespacedFinalClass + +fun getNamespacedFinalClassName(): String? = NamespacedFinalClass::class.objCNameOrNull \ No newline at end of file
diff --git a/native/swift/swift-export-standalone/testData/execution/classMappings/classMappings.swift b/native/swift/swift-export-standalone/testData/execution/classMappings/classMappings.swift new file mode 100644 index 0000000..c9f69c3 --- /dev/null +++ b/native/swift/swift-export-standalone/testData/execution/classMappings/classMappings.swift
@@ -0,0 +1,56 @@ +import ClassMappings +import KotlinRuntime +import ObjectiveC + +enum TestTypeError: Error { + case classNotBound(Any.Type) + case classNotFound(String) + case classWrongType(actual: Any, expected: Any.Type) +} + +func testType<T: KotlinBase>(_ optionalName: String?, _ type: T.Type) throws { + guard let name = optionalName else { throw TestTypeError.classNotBound(type) } + guard let objcClass = objc_getClass(name) else { throw TestTypeError.classNotFound(name) } + guard let swiftClass = objcClass as? T.Type else { throw TestTypeError.classWrongType(actual: objcClass, expected: type) } + try assertSame(actual: swiftClass, expected: type) +} + +func testAnyClass() throws { + try testType(getAnyClassName(), KotlinBase.self) +} + +func testFinalClass() throws { + try testType(getFinalClassName(), FinalClass.self) +} + +func testNestedFinalClass() throws { + try testType(getNestedFinalClassName(), FinalClass.NestedFinalClass.self) +} + +func testNamespacedFinalClass() throws { + try testType(namespace.getNamespacedFinalClassName(), namespace.NamespacedFinalClass.self) +} + +func testOpenClass() throws { + try testType(getOpenClassName(), OpenClass.self) +} + +func testPrivateClass() throws { + try assertNil(getPrivateClassName()) +} + +class ClassMappingsTests : TestProvider { + var tests: [TestCase] = [] + + init() { + providers.append(self) + tests = [ + TestCase(name: "testAnyClass", method: withAutorelease(testAnyClass)), + TestCase(name: "testFinalClass", method: withAutorelease(testFinalClass)), + TestCase(name: "testNestedFinalClass", method: withAutorelease(testNestedFinalClass)), + TestCase(name: "testNamespacedFinalClass", method: withAutorelease(testNamespacedFinalClass)), + TestCase(name: "testOpenClass", method: withAutorelease(testOpenClass)), + TestCase(name: "testPrivateClass", method: withAutorelease(testPrivateClass)), + ] + } +} \ No newline at end of file
diff --git a/native/swift/swift-export-standalone/testData/generation/any/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/any/golden_result/main/main.kt index 64c4816..34f8516 100644 --- a/native/swift/swift-export-standalone/testData/generation/any/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/any/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(MyObject::class, "4main8MyObjectC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/classes/golden_result/cross_module_inheritance/cross_module_inheritance.kt b/native/swift/swift-export-standalone/testData/generation/classes/golden_result/cross_module_inheritance/cross_module_inheritance.kt index afc147a..6f3b958 100644 --- a/native/swift/swift-export-standalone/testData/generation/classes/golden_result/cross_module_inheritance/cross_module_inheritance.kt +++ b/native/swift/swift-export-standalone/testData/generation/classes/golden_result/cross_module_inheritance/cross_module_inheritance.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(CLASS_ACROSS_MODULES::class, "24cross_module_inheritance20CLASS_ACROSS_MODULESC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/classes/golden_result/inheritance/inheritance.kt b/native/swift/swift-export-standalone/testData/generation/classes/golden_result/inheritance/inheritance.kt index a59cd78..a3749c2 100644 --- a/native/swift/swift-export-standalone/testData/generation/classes/golden_result/inheritance/inheritance.kt +++ b/native/swift/swift-export-standalone/testData/generation/classes/golden_result/inheritance/inheritance.kt
@@ -1,3 +1,7 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(INHERITANCE_SINGLE_CLASS::class, "11inheritance24INHERITANCE_SINGLE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_WITH_CLASS_INHERITANCE::class, "11inheritance29OBJECT_WITH_CLASS_INHERITANCEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OPEN_CLASS::class, "11inheritance10OPEN_CLASSC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/classes/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/classes/golden_result/main/main.kt index 46b1843..1941a69 100644 --- a/native/swift/swift-export-standalone/testData/generation/classes/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/classes/golden_result/main/main.kt
@@ -1,3 +1,29 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.Foo::class, "22ExportedKotlinPackages9namespaceO4mainE3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.Foo.INSIDE_CLASS::class, "22ExportedKotlinPackages9namespaceO4mainE3FooC12INSIDE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.NAMESPACED_CLASS::class, "22ExportedKotlinPackages9namespaceO4mainE16NAMESPACED_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.DATA_OBJECT_WITH_PACKAGE::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE24DATA_OBJECT_WITH_PACKAGEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Foo::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Foo.INSIDE_CLASS::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE3FooC12INSIDE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Foo.INSIDE_CLASS.DEEPER_INSIDE_CLASS::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE3FooC12INSIDE_CLASSC19DEEPER_INSIDE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.NAMESPACED_CLASS::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE16NAMESPACED_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.OBJECT_WITH_PACKAGE::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19OBJECT_WITH_PACKAGEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.OBJECT_WITH_PACKAGE.Bar::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19OBJECT_WITH_PACKAGEC3BarC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.OBJECT_WITH_PACKAGE.Bar.OBJECT_INSIDE_CLASS::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19OBJECT_WITH_PACKAGEC3BarC19OBJECT_INSIDE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.OBJECT_WITH_PACKAGE.Foo::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19OBJECT_WITH_PACKAGEC3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.OBJECT_WITH_PACKAGE.OBJECT_INSIDE_OBJECT::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19OBJECT_WITH_PACKAGEC20OBJECT_INSIDE_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(why_we_need_module_names.CLASS_WITH_SAME_NAME::class, "22ExportedKotlinPackages24why_we_need_module_namesO4mainE20CLASS_WITH_SAME_NAMEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(CLASS_WITH_SAME_NAME::class, "4main20CLASS_WITH_SAME_NAMEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(ClassWithNonPublicConstructor::class, "4main29ClassWithNonPublicConstructorC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo::class, "4main3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo.Companion::class, "4main3FooC9CompanionC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo.INSIDE_CLASS::class, "4main3FooC12INSIDE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_NO_PACKAGE::class, "4main17OBJECT_NO_PACKAGEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_NO_PACKAGE.Bar::class, "4main17OBJECT_NO_PACKAGEC3BarC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_NO_PACKAGE.Bar.CLASS_INSIDE_CLASS_INSIDE_OBJECT::class, "4main17OBJECT_NO_PACKAGEC3BarC32CLASS_INSIDE_CLASS_INSIDE_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_NO_PACKAGE.Bar.NamedCompanion::class, "4main17OBJECT_NO_PACKAGEC3BarC14NamedCompanionC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_NO_PACKAGE.Foo::class, "4main17OBJECT_NO_PACKAGEC3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_NO_PACKAGE.OBJECT_INSIDE_OBJECT::class, "4main17OBJECT_NO_PACKAGEC20OBJECT_INSIDE_OBJECTC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/consuming_dependencies/golden_result/dependency_deeper_neighbor_exported/dependency_deeper_neighbor_exported.kt b/native/swift/swift-export-standalone/testData/generation/consuming_dependencies/golden_result/dependency_deeper_neighbor_exported/dependency_deeper_neighbor_exported.kt index 0d2f875..1f105fb 100644 --- a/native/swift/swift-export-standalone/testData/generation/consuming_dependencies/golden_result/dependency_deeper_neighbor_exported/dependency_deeper_neighbor_exported.kt +++ b/native/swift/swift-export-standalone/testData/generation/consuming_dependencies/golden_result/dependency_deeper_neighbor_exported/dependency_deeper_neighbor_exported.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(dependency.four.AnotherBar::class, "22ExportedKotlinPackages10dependencyO4fourO35dependency_deeper_neighbor_exportedE10AnotherBarC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/dep/dep.kt b/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/dep/dep.kt index 9923cb5..8eb9c21 100644 --- a/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/dep/dep.kt +++ b/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/dep/dep.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(test.factory.modules.ClassFromDependency::class, "22ExportedKotlinPackages4testO7factoryO7modulesO3depE19ClassFromDependencyC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/flattened/flattened.kt b/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/flattened/flattened.kt index 435bc61..108721c 100644 --- a/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/flattened/flattened.kt +++ b/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/flattened/flattened.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(flattenedPackage.FlattenedPackageClass::class, "22ExportedKotlinPackages16flattenedPackageO9flattenedE21FlattenedPackageClassC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/main/main.kt index b2e394a..fc4ee0d 100644 --- a/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/functionAndClassWithSameName/golden_result/main/main.kt
@@ -1,3 +1,10 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(test.factory.ClassWithFactoryInAPackage::class, "22ExportedKotlinPackages4testO7factoryO4mainE26ClassWithFactoryInAPackageC") +@file:kotlin.native.internal.objc.BindClassToObjCName(test.factory.Outer::class, "22ExportedKotlinPackages4testO7factoryO4mainE5OuterC") +@file:kotlin.native.internal.objc.BindClassToObjCName(test.factory.Outer.Nested::class, "22ExportedKotlinPackages4testO7factoryO4mainE5OuterC6NestedC") +@file:kotlin.native.internal.objc.BindClassToObjCName(ClassWithFactoryWithoutParameters::class, "4main33ClassWithFactoryWithoutParametersC") +@file:kotlin.native.internal.objc.BindClassToObjCName(ObjectWithFactory::class, "4main17ObjectWithFactoryC") +@file:kotlin.native.internal.objc.BindClassToObjCName(UtcOffset::class, "4main9UtcOffsetC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/functions/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/functions/golden_result/main/main.kt index a11a6ee..1521985 100644 --- a/native/swift/swift-export-standalone/testData/generation/functions/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/functions/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(overload.Foo::class, "22ExportedKotlinPackages8overloadO4mainE3FooC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/inheritance/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/inheritance/golden_result/main/main.kt index 3fb30bb..80323bb 100644 --- a/native/swift/swift-export-standalone/testData/generation/inheritance/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/inheritance/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo::class, "4main3FooC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/inner_classes/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/inner_classes/golden_result/main/main.kt index 6496824..5230940 100644 --- a/native/swift/swift-export-standalone/testData/generation/inner_classes/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/inner_classes/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(Outer::class, "4main5OuterC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/nothing_type/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/nothing_type/golden_result/main/main.kt index efbb1cf..593de3b 100644 --- a/native/swift/swift-export-standalone/testData/generation/nothing_type/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/nothing_type/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(Bar::class, "4main3BarC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/nullable_type/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/nullable_type/golden_result/main/main.kt index a98cb1b..25f1bf6 100644 --- a/native/swift/swift-export-standalone/testData/generation/nullable_type/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/nullable_type/golden_result/main/main.kt
@@ -1,3 +1,6 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(Bar::class, "4main3BarC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo::class, "4main3FooC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/package_flattening/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/package_flattening/golden_result/main/main.kt index 5037843..e54302b 100644 --- a/native/swift/swift-export-standalone/testData/generation/package_flattening/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/package_flattening/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(org.kotlin.foo.Clazz::class, "22ExportedKotlinPackages3orgO6kotlinO3fooO4mainE5ClazzC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/package_flattening_invalid_target/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/package_flattening_invalid_target/golden_result/main/main.kt index 6736d69..92f8f79 100644 --- a/native/swift/swift-export-standalone/testData/generation/package_flattening_invalid_target/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/package_flattening_invalid_target/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(org.kotlin.Foo::class, "22ExportedKotlinPackages3orgO6kotlinO4mainE3FooC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/package_flattening_missing_target/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/package_flattening_missing_target/golden_result/main/main.kt index 6736d69..92f8f79 100644 --- a/native/swift/swift-export-standalone/testData/generation/package_flattening_missing_target/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/package_flattening_missing_target/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(org.kotlin.Foo::class, "22ExportedKotlinPackages3orgO6kotlinO4mainE3FooC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/single_module_production/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/single_module_production/golden_result/main/main.kt index 5037843..2cb89ec 100644 --- a/native/swift/swift-export-standalone/testData/generation/single_module_production/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/single_module_production/golden_result/main/main.kt
@@ -1,3 +1,5 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(org.kotlin.foo.Clazz::class, "4main3orgO6kotlinO3fooO4mainE5ClazzC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/type_reference/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/type_reference/golden_result/main/main.kt index 7fca47d..c117353 100644 --- a/native/swift/swift-export-standalone/testData/generation/type_reference/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/type_reference/golden_result/main/main.kt
@@ -1,3 +1,21 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Class_with_package::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE18Class_with_packageC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Class_with_package.INNER_CLASS::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE18Class_with_packageC11INNER_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Class_with_package.INNER_OBJECT::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE18Class_with_packageC12INNER_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.DATA_OBJECT::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE11DATA_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Object_with_package::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19Object_with_packageC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Object_with_package.INNER_CLASS::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19Object_with_packageC11INNER_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(namespace.deeper.Object_with_package.INNER_OBJECT::class, "22ExportedKotlinPackages9namespaceO6deeperO4mainE19Object_with_packageC12INNER_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Class_without_package::class, "4main21Class_without_packageC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Class_without_package.INNER_CLASS::class, "4main21Class_without_packageC11INNER_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Class_without_package.INNER_OBJECT::class, "4main21Class_without_packageC12INNER_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Demo::class, "4main4DemoC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Demo.INNER_CLASS::class, "4main4DemoC11INNER_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Demo.INNER_OBJECT::class, "4main4DemoC12INNER_OBJECTC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OPEN_CLASS::class, "4main10OPEN_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Object_without_package::class, "4main22Object_without_packageC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Object_without_package.INNER_CLASS::class, "4main22Object_without_packageC11INNER_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Object_without_package.INNER_OBJECT::class, "4main22Object_without_packageC12INNER_OBJECTC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/typealiases/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/typealiases/golden_result/main/main.kt index 69a3b2c..8376acf 100644 --- a/native/swift/swift-export-standalone/testData/generation/typealiases/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/typealiases/golden_result/main/main.kt
@@ -1,3 +1,10 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(typealiases.Foo::class, "22ExportedKotlinPackages11typealiasesO4mainE3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(typealiases.inner.Bar::class, "22ExportedKotlinPackages11typealiasesO5innerO4mainE3BarC") +@file:kotlin.native.internal.objc.BindClassToObjCName(DATA_OBJECT_WITH_PACKAGE::class, "4main24DATA_OBJECT_WITH_PACKAGEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(INHERITANCE_SINGLE_CLASS::class, "4main24INHERITANCE_SINGLE_CLASSC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OBJECT_WITH_CLASS_INHERITANCE::class, "4main29OBJECT_WITH_CLASS_INHERITANCEC") +@file:kotlin.native.internal.objc.BindClassToObjCName(OPEN_CLASS::class, "4main10OPEN_CLASSC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/testData/generation/unsupportedDeclarationsReporting/golden_result/main/main.kt b/native/swift/swift-export-standalone/testData/generation/unsupportedDeclarationsReporting/golden_result/main/main.kt index 7f24015..9c9532f 100644 --- a/native/swift/swift-export-standalone/testData/generation/unsupportedDeclarationsReporting/golden_result/main/main.kt +++ b/native/swift/swift-export-standalone/testData/generation/unsupportedDeclarationsReporting/golden_result/main/main.kt
@@ -1,3 +1,6 @@ +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo::class, "4main3FooC") +@file:kotlin.native.internal.objc.BindClassToObjCName(Foo.Nested::class, "4main3FooC6NestedC") + import kotlin.native.internal.ExportedBridge import kotlinx.cinterop.*
diff --git a/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportExecutionTestGenerated.java b/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportExecutionTestGenerated.java index 271355f..e6a386e 100644 --- a/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportExecutionTestGenerated.java +++ b/native/swift/swift-export-standalone/tests-gen/org/jetbrains/kotlin/swiftexport/standalone/SwiftExportExecutionTestGenerated.java
@@ -42,6 +42,12 @@ } @Test + @TestMetadata("classMappings") + public void testClassMappings() { + runTest("native/swift/swift-export-standalone/testData/execution/classMappings/"); + } + + @Test @TestMetadata("never_type") public void testNever_type() { runTest("native/swift/swift-export-standalone/testData/execution/never_type/");