[ObjCExport] Fix top level property

KT-64923


Merge-request: KT-MR-13873
Merged-by: Eugene Levenetc <Eugene.Levenetc@jetbrains.com>
This commit is contained in:
eugene.levenetc
2024-01-15 01:49:37 +00:00
committed by Space Team
parent a713d66b7b
commit fc56f2af1c
3 changed files with 28 additions and 17 deletions
@@ -4,6 +4,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.analysis.api.types.KtFunctionalType
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.backend.konan.KonanPrimitiveType
@@ -14,18 +15,10 @@ import org.jetbrains.kotlin.objcexport.*
* [org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportMapperKt.bridgeMethodImpl]
*/
context(KtAnalysisSession, KtObjCExportSession)
internal fun KtFunctionLikeSymbol.getMethodBridge(): MethodBridge {
internal fun KtFunctionLikeSymbol.getFunctionMethodBridge(): MethodBridge {
val valueParameters = mutableListOf<MethodBridgeValueParameter>()
val receiver = if (isConstructor && isArray) {
MethodBridgeReceiver.Factory
} else if (isTopLevel) {
MethodBridgeReceiver.Static
} else {
MethodBridgeReceiver.Instance
}
this.valueParameters.forEach {
valueParameters += bridgeParameter(it.returnType)
}
@@ -36,11 +29,29 @@ internal fun KtFunctionLikeSymbol.getMethodBridge(): MethodBridge {
return MethodBridge(
bridgeReturnType(),
receiver,
receiverType,
valueParameters
)
}
context(KtAnalysisSession, KtObjCExportSession)
internal fun KtPropertySymbol.getPropertyMethodBridge(): MethodBridge {
return MethodBridge(
bridgeReturnType(),
receiverType,
emptyList()
)
}
private val KtCallableSymbol.receiverType: MethodBridgeReceiver
get() = if (isConstructor && isArray) {
MethodBridgeReceiver.Factory
} else if (isTopLevel) {
MethodBridgeReceiver.Static
} else {
MethodBridgeReceiver.Instance
}
/**
* [ObjCExportMapper.bridgeParameter]
*/
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.backend.konan.objcexport.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.NameUtils
import org.jetbrains.kotlin.objcexport.Predefined.anyMethodSelectors
import org.jetbrains.kotlin.objcexport.analysisApiUtils.getMethodBridge
import org.jetbrains.kotlin.objcexport.analysisApiUtils.getFunctionMethodBridge
import org.jetbrains.kotlin.objcexport.analysisApiUtils.isVisibleInObjC
import org.jetbrains.kotlin.psi.KtFile
@@ -47,7 +47,7 @@ context(KtAnalysisSession, KtObjCExportSession)
internal fun KtFunctionLikeSymbol.buildObjCMethod(
unavailable: Boolean = false,
): ObjCMethod {
val bridge = getMethodBridge()
val bridge = getFunctionMethodBridge()
val returnType: ObjCType = mapReturnType(bridge.returnBridge)
val parameters = translateToObjCParameters(bridge)
val selector = getSelector(bridge)
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCProperty
import org.jetbrains.kotlin.backend.konan.objcexport.swiftNameAttribute
import org.jetbrains.kotlin.objcexport.analysisApiUtils.getMethodBridge
import org.jetbrains.kotlin.objcexport.analysisApiUtils.getPropertyMethodBridge
import org.jetbrains.kotlin.objcexport.analysisApiUtils.isVisibleInObjC
context(KtAnalysisSession, KtObjCExportSession)
@@ -25,12 +25,12 @@ context(KtAnalysisSession, KtObjCExportSession)
fun KtPropertySymbol.buildProperty(): ObjCProperty {
val propertyName = getObjCPropertyName()
val name = propertyName.objCName
val getterBridge = getter?.getMethodBridge()
val type = getter?.mapReturnType(getterBridge!!.returnBridge)
val bridge = getPropertyMethodBridge()
val type = getter?.mapReturnType(bridge.returnBridge)
val attributes = mutableListOf<String>()
val setterName: String?
if (getterBridge!!.isInstance) {
if (!bridge.isInstance) {
attributes += "class"
}
@@ -39,7 +39,7 @@ fun KtPropertySymbol.buildProperty(): ObjCProperty {
val shouldBeSetterExposed = true //TODO: mapper.shouldBeExposed
if (propertySetter != null && shouldBeSetterExposed) {
val setterSelector = propertySetter.getSelector(getterBridge)
val setterSelector = propertySetter.getSelector(bridge)
setterName = if (setterSelector != "set" + name.replaceFirstChar(Char::uppercaseChar) + ":") setterSelector else null
} else {
attributes += "readonly"