add export from kotlin into swift of class content #KT-65896 fixed
Merge-request: KT-MR-14624 Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
+35
-24
@@ -7,19 +7,12 @@ package org.jetbrains.kotlin.swiftexport.standalone.builders
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtVariableLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.psiSafe
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.sir.SirElement
|
||||
import org.jetbrains.kotlin.sir.SirFunction
|
||||
import org.jetbrains.kotlin.sir.SirVariable
|
||||
import org.jetbrains.kotlin.sir.SirAccessor
|
||||
import org.jetbrains.kotlin.sir.SirSetter
|
||||
import org.jetbrains.kotlin.sir.SirGetter
|
||||
import org.jetbrains.kotlin.sir.*
|
||||
import org.jetbrains.kotlin.sir.util.*
|
||||
import org.jetbrains.kotlin.sir.SirModule
|
||||
import org.jetbrains.kotlin.sir.bridge.BridgeRequest
|
||||
import org.jetbrains.kotlin.sir.bridge.createFunctionBodyFromRequest
|
||||
import org.jetbrains.kotlin.sir.visitors.SirVisitorVoid
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
import org.jetbrains.sir.passes.SirPass
|
||||
import org.jetbrains.sir.passes.builder.KotlinSource
|
||||
import org.jetbrains.sir.passes.run
|
||||
@@ -46,15 +39,10 @@ private object BridgeGenerationPass : SirPass<SirElement, Nothing?, List<BridgeR
|
||||
?.callableIdIfNonLocal?.asSingleFqName()
|
||||
?.pathSegments()?.map { it.toString() }
|
||||
?: return
|
||||
val fqNameForBridge = fqName.forBridge
|
||||
|
||||
val bridgeRequest = BridgeRequest(
|
||||
function,
|
||||
fqNameForBridge.joinToString("_"),
|
||||
fqName
|
||||
requests.addIfNotNull(
|
||||
function.patchCallableBodyAndGenerateRequest(fqName)
|
||||
)
|
||||
requests += bridgeRequest
|
||||
function.body = createFunctionBodyFromRequest(bridgeRequest)
|
||||
}
|
||||
|
||||
override fun visitVariable(variable: SirVariable) {
|
||||
@@ -62,22 +50,45 @@ private object BridgeGenerationPass : SirPass<SirElement, Nothing?, List<BridgeR
|
||||
?.callableIdIfNonLocal?.asSingleFqName()
|
||||
?.pathSegments()?.map { it.toString() }
|
||||
?: return
|
||||
val fqNameForBridge = fqName.forBridge
|
||||
|
||||
variable.accessors.forEach {
|
||||
val suffix = it.bridgeSuffix
|
||||
val request = BridgeRequest(
|
||||
it,
|
||||
fqNameForBridge.joinToString("_") + "_$suffix",
|
||||
fqName
|
||||
requests.addIfNotNull(
|
||||
it.patchCallableBodyAndGenerateRequest(fqName)
|
||||
)
|
||||
requests += request
|
||||
it.body = createFunctionBodyFromRequest(request)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun SirCallable.patchCallableBodyAndGenerateRequest(
|
||||
fqName: List<String>,
|
||||
): BridgeRequest? = when (kind) {
|
||||
SirCallableKind.FUNCTION,
|
||||
SirCallableKind.STATIC_METHOD,
|
||||
-> {
|
||||
val suffix = bridgeSuffix
|
||||
val request = BridgeRequest(
|
||||
this,
|
||||
fqName.forBridge.joinToString("_") + suffix,
|
||||
fqName
|
||||
)
|
||||
body = createFunctionBodyFromRequest(request)
|
||||
request
|
||||
}
|
||||
SirCallableKind.INSTANCE_METHOD,
|
||||
SirCallableKind.CLASS_METHOD,
|
||||
-> {
|
||||
body = SirFunctionBody(listOf("fatalError()"))
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private val SirCallable.bridgeSuffix: String
|
||||
get() = when (this) {
|
||||
is SirAccessor -> "_$bridgeSuffix"
|
||||
else -> ""
|
||||
}
|
||||
|
||||
private val SirAccessor.bridgeSuffix: String
|
||||
get() = when (this) {
|
||||
is SirGetter -> "get"
|
||||
|
||||
+6
-5
@@ -38,11 +38,12 @@ private fun generateBridgeSources(requests: List<BridgeRequest>): BridgeSources
|
||||
val kotlinBridgePrinter = createKotlinBridgePrinter()
|
||||
val cBridgePrinter = createCBridgePrinter()
|
||||
|
||||
requests.forEach { request ->
|
||||
val bridge = generator.generate(request)
|
||||
kotlinBridgePrinter.add(bridge)
|
||||
cBridgePrinter.add(bridge)
|
||||
}
|
||||
requests
|
||||
.map(generator::generate)
|
||||
.forEach {
|
||||
kotlinBridgePrinter.add(it)
|
||||
cBridgePrinter.add(it)
|
||||
}
|
||||
|
||||
val actualKotlinSrc = kotlinBridgePrinter.print()
|
||||
val actualCHeader = cBridgePrinter.print()
|
||||
|
||||
+48
@@ -6,13 +6,61 @@ public enum namespace {
|
||||
public class NAMESPACED_CLASS {
|
||||
}
|
||||
public class Foo {
|
||||
public func foo() -> Swift.Bool {
|
||||
fatalError()
|
||||
}
|
||||
public var my_value: Swift.UInt32 {
|
||||
get {
|
||||
fatalError()
|
||||
}
|
||||
}
|
||||
public var my_variable: Swift.Int64 {
|
||||
get {
|
||||
fatalError()
|
||||
}
|
||||
set {
|
||||
fatalError()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public class NAMESPACED_CLASS {
|
||||
}
|
||||
public class Foo {
|
||||
public func foo() -> Swift.Bool {
|
||||
fatalError()
|
||||
}
|
||||
public var my_value: Swift.UInt32 {
|
||||
get {
|
||||
fatalError()
|
||||
}
|
||||
}
|
||||
public var my_variable: Swift.Int64 {
|
||||
get {
|
||||
fatalError()
|
||||
}
|
||||
set {
|
||||
fatalError()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Foo {
|
||||
public func foo() -> Swift.Bool {
|
||||
fatalError()
|
||||
}
|
||||
public var my_value: Swift.UInt32 {
|
||||
get {
|
||||
fatalError()
|
||||
}
|
||||
}
|
||||
public var my_variable: Swift.Int64 {
|
||||
get {
|
||||
fatalError()
|
||||
}
|
||||
set {
|
||||
fatalError()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+7
@@ -4,4 +4,11 @@ class NAMESPACED_CLASS
|
||||
|
||||
class Foo {
|
||||
class INSIDE_CLASS // this should be ignored currently
|
||||
|
||||
fun foo(): Boolean = TODO()
|
||||
|
||||
val my_value: UInt = 5u
|
||||
|
||||
var my_variable: Long = 5
|
||||
|
||||
}
|
||||
|
||||
+7
@@ -4,4 +4,11 @@ class NAMESPACED_CLASS
|
||||
|
||||
class Foo {
|
||||
class INSIDE_CLASS // this should be ignored currently
|
||||
|
||||
fun foo(): Boolean = TODO()
|
||||
|
||||
val my_value: UInt = 5u
|
||||
|
||||
var my_variable: Long = 5
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
|
||||
class Foo {
|
||||
class INSIDE_CLASS // this should be ignored currently
|
||||
|
||||
fun foo(): Boolean = TODO()
|
||||
|
||||
val my_value: UInt = 5u
|
||||
|
||||
var my_variable: Long = 5
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user