[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:
committed by
Space Team
parent
a713d66b7b
commit
fc56f2af1c
+21
-10
@@ -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]
|
||||
*/
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+5
-5
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user