[ObjCExport] Split ObjCExport into K1 and Analysis Api implementation
FL-23390 ^KT-64168 Fixed
This commit is contained in:
committed by
Space Team
parent
3e57265fcb
commit
e409c60780
@@ -156,6 +156,7 @@ dependencies {
|
||||
|
||||
compilerApi project(":kotlin-native:utilities:basic-utils")
|
||||
compilerApi project(":native:objcexport-header-generator")
|
||||
compilerApi project(":native:objcexport-header-generator-k1")
|
||||
compilerApi project(":native:base")
|
||||
|
||||
compilerImplementation project(":kotlin-compiler")
|
||||
|
||||
-1
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportProblemCollector
|
||||
import org.jetbrains.kotlin.backend.konan.objcexport.dumpObjCHeader
|
||||
import org.jetbrains.kotlin.container.*
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
||||
|
||||
|
||||
+2
-2
@@ -27,8 +27,8 @@ internal val ProduceObjCExportInterfacePhase = createSimpleNamedCompilerPhase<Ph
|
||||
}
|
||||
|
||||
internal data class CreateObjCFrameworkInput(
|
||||
val moduleDescriptor: ModuleDescriptor,
|
||||
val exportedInterface: ObjCExportedInterface,
|
||||
val moduleDescriptor: ModuleDescriptor,
|
||||
val exportedInterface: ObjCExportedInterface,
|
||||
)
|
||||
|
||||
/**
|
||||
|
||||
+36
-36
@@ -346,9 +346,9 @@ internal class ObjCExportCodeGenerator(
|
||||
}
|
||||
|
||||
private fun ObjCExportFunctionGenerationContext.objCBlockPointerToKotlin(
|
||||
value: LLVMValueRef,
|
||||
typeBridge: BlockPointerBridge,
|
||||
resultLifetime: Lifetime
|
||||
value: LLVMValueRef,
|
||||
typeBridge: BlockPointerBridge,
|
||||
resultLifetime: Lifetime
|
||||
) = callFromBridge(
|
||||
blockToKotlinFunctionConverter(typeBridge),
|
||||
listOf(value),
|
||||
@@ -356,14 +356,14 @@ internal class ObjCExportCodeGenerator(
|
||||
)
|
||||
|
||||
internal fun ObjCExportFunctionGenerationContext.kotlinFunctionToRetainedObjCBlockPointer(
|
||||
typeBridge: BlockPointerBridge,
|
||||
value: LLVMValueRef
|
||||
typeBridge: BlockPointerBridge,
|
||||
value: LLVMValueRef
|
||||
) = callFromBridge(kotlinFunctionToRetainedBlockConverter(typeBridge), listOf(value))
|
||||
|
||||
fun ObjCExportFunctionGenerationContext.objCToKotlin(
|
||||
value: LLVMValueRef,
|
||||
typeBridge: TypeBridge,
|
||||
resultLifetime: Lifetime
|
||||
value: LLVMValueRef,
|
||||
typeBridge: TypeBridge,
|
||||
resultLifetime: Lifetime
|
||||
): LLVMValueRef = when (typeBridge) {
|
||||
is ReferenceBridge -> objCReferenceToKotlin(value, resultLifetime)
|
||||
is BlockPointerBridge -> objCBlockPointerToKotlin(value, typeBridge, resultLifetime)
|
||||
@@ -894,10 +894,10 @@ private fun ObjCExportFunctionGenerationContextBuilder.setupBridgeDebugInfo() {
|
||||
}
|
||||
|
||||
private inline fun ObjCExportCodeGenerator.generateObjCImpBy(
|
||||
methodBridge: MethodBridge,
|
||||
debugInfo: Boolean = false,
|
||||
suffix: String,
|
||||
genBody: ObjCExportFunctionGenerationContext.() -> Unit
|
||||
methodBridge: MethodBridge,
|
||||
debugInfo: Boolean = false,
|
||||
suffix: String,
|
||||
genBody: ObjCExportFunctionGenerationContext.() -> Unit
|
||||
): LlvmCallable {
|
||||
val functionType = objCFunctionType(generationState, methodBridge)
|
||||
val functionName = "objc2kotlin_$suffix"
|
||||
@@ -923,11 +923,11 @@ private fun ObjCExportCodeGenerator.generateAbstractObjCImp(methodBridge: Method
|
||||
}
|
||||
|
||||
private fun ObjCExportCodeGenerator.generateObjCImp(
|
||||
target: IrFunction?,
|
||||
baseMethod: IrFunction,
|
||||
methodBridge: MethodBridge,
|
||||
isVirtual: Boolean = false,
|
||||
customBridgeSuffix: String? = null,
|
||||
target: IrFunction?,
|
||||
baseMethod: IrFunction,
|
||||
methodBridge: MethodBridge,
|
||||
isVirtual: Boolean = false,
|
||||
customBridgeSuffix: String? = null,
|
||||
) = if (target == null) {
|
||||
generateAbstractObjCImp(methodBridge, baseMethod)
|
||||
} else {
|
||||
@@ -953,11 +953,11 @@ private fun ObjCExportCodeGenerator.generateObjCImp(
|
||||
}
|
||||
|
||||
private fun ObjCExportCodeGenerator.generateObjCImp(
|
||||
methodBridge: MethodBridge,
|
||||
isDirect: Boolean,
|
||||
baseMethod: IrFunction? = null,
|
||||
bridgeSuffix: String,
|
||||
callKotlin: ObjCExportFunctionGenerationContext.(
|
||||
methodBridge: MethodBridge,
|
||||
isDirect: Boolean,
|
||||
baseMethod: IrFunction? = null,
|
||||
bridgeSuffix: String,
|
||||
callKotlin: ObjCExportFunctionGenerationContext.(
|
||||
args: List<LLVMValueRef>,
|
||||
resultLifetime: Lifetime,
|
||||
exceptionHandler: ExceptionHandler
|
||||
@@ -1802,8 +1802,8 @@ private inline fun ObjCExportCodeGenerator.generateObjCToKotlinSyntheticGetter(
|
||||
): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter {
|
||||
|
||||
val methodBridge = MethodBridge(
|
||||
MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
MethodBridgeReceiver.Static, valueParameters = emptyList()
|
||||
MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
MethodBridgeReceiver.Static, valueParameters = emptyList()
|
||||
)
|
||||
|
||||
val functionType = objCFunctionType(generationState, methodBridge)
|
||||
@@ -1818,9 +1818,9 @@ private inline fun ObjCExportCodeGenerator.generateObjCToKotlinSyntheticGetter(
|
||||
}
|
||||
|
||||
private fun ObjCExportCodeGenerator.objCToKotlinMethodAdapter(
|
||||
selector: String,
|
||||
methodBridge: MethodBridge,
|
||||
imp: LlvmCallable
|
||||
selector: String,
|
||||
methodBridge: MethodBridge,
|
||||
imp: LlvmCallable
|
||||
): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter {
|
||||
selectorsToDefine[selector] = methodBridge
|
||||
|
||||
@@ -1844,9 +1844,9 @@ private fun ObjCExportCodeGenerator.createObjectInstanceAdapter(
|
||||
assert(!objectClass.isUnit())
|
||||
|
||||
val methodBridge = MethodBridge(
|
||||
returnBridge = MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
receiver = MethodBridgeReceiver.Static,
|
||||
valueParameters = emptyList()
|
||||
returnBridge = MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
receiver = MethodBridgeReceiver.Static,
|
||||
valueParameters = emptyList()
|
||||
)
|
||||
|
||||
val function = context.getObjectClassInstanceFunction(objectClass)
|
||||
@@ -1876,9 +1876,9 @@ private fun ObjCExportCodeGenerator.createEnumValuesOrEntriesAdapter(
|
||||
selector: String
|
||||
): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter {
|
||||
val methodBridge = MethodBridge(
|
||||
returnBridge = MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
receiver = MethodBridgeReceiver.Static,
|
||||
valueParameters = emptyList()
|
||||
returnBridge = MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
receiver = MethodBridgeReceiver.Static,
|
||||
valueParameters = emptyList()
|
||||
)
|
||||
|
||||
val imp = generateObjCImp(function, function, methodBridge, isVirtual = false)
|
||||
@@ -1888,9 +1888,9 @@ private fun ObjCExportCodeGenerator.createEnumValuesOrEntriesAdapter(
|
||||
|
||||
private fun ObjCExportCodeGenerator.createThrowableAsErrorAdapter(): ObjCExportCodeGenerator.ObjCToKotlinMethodAdapter {
|
||||
val methodBridge = MethodBridge(
|
||||
returnBridge = MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
receiver = MethodBridgeReceiver.Instance,
|
||||
valueParameters = emptyList()
|
||||
returnBridge = MethodBridge.ReturnValue.Mapped(ReferenceBridge),
|
||||
receiver = MethodBridgeReceiver.Instance,
|
||||
valueParameters = emptyList()
|
||||
)
|
||||
|
||||
val imp = generateObjCImpBy(methodBridge, suffix = "ThrowableAsError") {
|
||||
|
||||
+3
-3
@@ -14,9 +14,9 @@ import org.jetbrains.kotlin.konan.target.Family
|
||||
* Builds Apple bundle directory.
|
||||
*/
|
||||
internal class BundleBuilder(
|
||||
private val config: KonanConfig,
|
||||
private val infoPListBuilder: InfoPListBuilder,
|
||||
private val mainPackageGuesser: MainPackageGuesser,
|
||||
private val config: KonanConfig,
|
||||
private val infoPListBuilder: InfoPListBuilder,
|
||||
private val mainPackageGuesser: MainPackageGuesser,
|
||||
) {
|
||||
fun build(
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
|
||||
+5
-5
@@ -14,11 +14,11 @@ import org.jetbrains.kotlin.konan.target.Family
|
||||
* Constructs an Apple framework without a binary.
|
||||
*/
|
||||
internal class FrameworkBuilder(
|
||||
private val config: KonanConfig,
|
||||
private val infoPListBuilder: InfoPListBuilder,
|
||||
private val moduleMapBuilder: ModuleMapBuilder,
|
||||
private val objCHeaderWriter: ObjCHeaderWriter,
|
||||
private val mainPackageGuesser: MainPackageGuesser,
|
||||
private val config: KonanConfig,
|
||||
private val infoPListBuilder: InfoPListBuilder,
|
||||
private val moduleMapBuilder: ModuleMapBuilder,
|
||||
private val objCHeaderWriter: ObjCHeaderWriter,
|
||||
private val mainPackageGuesser: MainPackageGuesser,
|
||||
) {
|
||||
fun build(
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
|
||||
+6
-6
@@ -26,9 +26,9 @@ internal class InfoPListBuilder(
|
||||
private val configuration = config.configuration
|
||||
|
||||
fun build(
|
||||
name: String,
|
||||
mainPackageGuesser: MainPackageGuesser,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
name: String,
|
||||
mainPackageGuesser: MainPackageGuesser,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
): String {
|
||||
val bundleId = computeBundleID(name, mainPackageGuesser, moduleDescriptor)
|
||||
|
||||
@@ -124,9 +124,9 @@ internal class InfoPListBuilder(
|
||||
}
|
||||
|
||||
private fun computeBundleID(
|
||||
bundleName: String,
|
||||
mainPackageGuesser: MainPackageGuesser,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
bundleName: String,
|
||||
mainPackageGuesser: MainPackageGuesser,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
): String {
|
||||
val deprecatedBundleIdOption = configuration[KonanConfigKeys.BUNDLE_ID]
|
||||
val bundleIdOption = configuration[BinaryOptions.bundleId]
|
||||
|
||||
+13
-13
@@ -101,18 +101,18 @@ private class ObjCExportCompilerProblemCollector(val context: PhaseContext) : Ob
|
||||
* Populate framework directory with headers, module and info.plist.
|
||||
*/
|
||||
internal fun createObjCFramework(
|
||||
config: KonanConfig,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
exportedInterface: ObjCExportedInterface,
|
||||
frameworkDirectory: File
|
||||
config: KonanConfig,
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
exportedInterface: ObjCExportedInterface,
|
||||
frameworkDirectory: File
|
||||
) {
|
||||
val frameworkName = frameworkDirectory.name.removeSuffix(CompilerOutputKind.FRAMEWORK.suffix())
|
||||
val frameworkBuilder = FrameworkBuilder(
|
||||
config,
|
||||
infoPListBuilder = InfoPListBuilder(config),
|
||||
moduleMapBuilder = ModuleMapBuilder(),
|
||||
objCHeaderWriter = ObjCHeaderWriter(),
|
||||
mainPackageGuesser = MainPackageGuesser(),
|
||||
config,
|
||||
infoPListBuilder = InfoPListBuilder(config),
|
||||
moduleMapBuilder = ModuleMapBuilder(),
|
||||
objCHeaderWriter = ObjCHeaderWriter(),
|
||||
mainPackageGuesser = MainPackageGuesser(),
|
||||
)
|
||||
frameworkBuilder.build(
|
||||
moduleDescriptor,
|
||||
@@ -135,10 +135,10 @@ internal fun createTestBundle(
|
||||
|
||||
// TODO: No need for such class in dynamic driver.
|
||||
internal class ObjCExport(
|
||||
private val generationState: NativeGenerationState,
|
||||
private val moduleDescriptor: ModuleDescriptor,
|
||||
private val exportedInterface: ObjCExportedInterface?,
|
||||
private val codeSpec: ObjCExportCodeSpec?
|
||||
private val generationState: NativeGenerationState,
|
||||
private val moduleDescriptor: ModuleDescriptor,
|
||||
private val exportedInterface: ObjCExportedInterface?,
|
||||
private val codeSpec: ObjCExportCodeSpec?
|
||||
) {
|
||||
private val config = generationState.config
|
||||
private val target get() = config.target
|
||||
|
||||
@@ -164,6 +164,7 @@ dependencies {
|
||||
distPack project(':kotlin-native:Interop:Skia')
|
||||
distPack project(':kotlin-native:backend.native')
|
||||
distPack project(':native:objcexport-header-generator')
|
||||
distPack project(':native:objcexport-header-generator-k1')
|
||||
distPack project(':native:base')
|
||||
distPack project(':kotlin-native:utilities:cli-runner')
|
||||
distPack project(':kotlin-native:utilities:basic-utils')
|
||||
|
||||
Reference in New Issue
Block a user