[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.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
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.KtFunctionalType
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.backend.konan.KonanPrimitiveType
|
import org.jetbrains.kotlin.backend.konan.KonanPrimitiveType
|
||||||
@@ -14,18 +15,10 @@ import org.jetbrains.kotlin.objcexport.*
|
|||||||
* [org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportMapperKt.bridgeMethodImpl]
|
* [org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportMapperKt.bridgeMethodImpl]
|
||||||
*/
|
*/
|
||||||
context(KtAnalysisSession, KtObjCExportSession)
|
context(KtAnalysisSession, KtObjCExportSession)
|
||||||
internal fun KtFunctionLikeSymbol.getMethodBridge(): MethodBridge {
|
internal fun KtFunctionLikeSymbol.getFunctionMethodBridge(): MethodBridge {
|
||||||
|
|
||||||
val valueParameters = mutableListOf<MethodBridgeValueParameter>()
|
val valueParameters = mutableListOf<MethodBridgeValueParameter>()
|
||||||
|
|
||||||
val receiver = if (isConstructor && isArray) {
|
|
||||||
MethodBridgeReceiver.Factory
|
|
||||||
} else if (isTopLevel) {
|
|
||||||
MethodBridgeReceiver.Static
|
|
||||||
} else {
|
|
||||||
MethodBridgeReceiver.Instance
|
|
||||||
}
|
|
||||||
|
|
||||||
this.valueParameters.forEach {
|
this.valueParameters.forEach {
|
||||||
valueParameters += bridgeParameter(it.returnType)
|
valueParameters += bridgeParameter(it.returnType)
|
||||||
}
|
}
|
||||||
@@ -36,11 +29,29 @@ internal fun KtFunctionLikeSymbol.getMethodBridge(): MethodBridge {
|
|||||||
|
|
||||||
return MethodBridge(
|
return MethodBridge(
|
||||||
bridgeReturnType(),
|
bridgeReturnType(),
|
||||||
receiver,
|
receiverType,
|
||||||
valueParameters
|
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]
|
* [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.Name
|
||||||
import org.jetbrains.kotlin.name.NameUtils
|
import org.jetbrains.kotlin.name.NameUtils
|
||||||
import org.jetbrains.kotlin.objcexport.Predefined.anyMethodSelectors
|
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.objcexport.analysisApiUtils.isVisibleInObjC
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ context(KtAnalysisSession, KtObjCExportSession)
|
|||||||
internal fun KtFunctionLikeSymbol.buildObjCMethod(
|
internal fun KtFunctionLikeSymbol.buildObjCMethod(
|
||||||
unavailable: Boolean = false,
|
unavailable: Boolean = false,
|
||||||
): ObjCMethod {
|
): ObjCMethod {
|
||||||
val bridge = getMethodBridge()
|
val bridge = getFunctionMethodBridge()
|
||||||
val returnType: ObjCType = mapReturnType(bridge.returnBridge)
|
val returnType: ObjCType = mapReturnType(bridge.returnBridge)
|
||||||
val parameters = translateToObjCParameters(bridge)
|
val parameters = translateToObjCParameters(bridge)
|
||||||
val selector = getSelector(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.analysis.api.symbols.KtPropertySymbol
|
||||||
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCProperty
|
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCProperty
|
||||||
import org.jetbrains.kotlin.backend.konan.objcexport.swiftNameAttribute
|
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
|
import org.jetbrains.kotlin.objcexport.analysisApiUtils.isVisibleInObjC
|
||||||
|
|
||||||
context(KtAnalysisSession, KtObjCExportSession)
|
context(KtAnalysisSession, KtObjCExportSession)
|
||||||
@@ -25,12 +25,12 @@ context(KtAnalysisSession, KtObjCExportSession)
|
|||||||
fun KtPropertySymbol.buildProperty(): ObjCProperty {
|
fun KtPropertySymbol.buildProperty(): ObjCProperty {
|
||||||
val propertyName = getObjCPropertyName()
|
val propertyName = getObjCPropertyName()
|
||||||
val name = propertyName.objCName
|
val name = propertyName.objCName
|
||||||
val getterBridge = getter?.getMethodBridge()
|
val bridge = getPropertyMethodBridge()
|
||||||
val type = getter?.mapReturnType(getterBridge!!.returnBridge)
|
val type = getter?.mapReturnType(bridge.returnBridge)
|
||||||
val attributes = mutableListOf<String>()
|
val attributes = mutableListOf<String>()
|
||||||
val setterName: String?
|
val setterName: String?
|
||||||
|
|
||||||
if (getterBridge!!.isInstance) {
|
if (!bridge.isInstance) {
|
||||||
attributes += "class"
|
attributes += "class"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ fun KtPropertySymbol.buildProperty(): ObjCProperty {
|
|||||||
val shouldBeSetterExposed = true //TODO: mapper.shouldBeExposed
|
val shouldBeSetterExposed = true //TODO: mapper.shouldBeExposed
|
||||||
|
|
||||||
if (propertySetter != null && shouldBeSetterExposed) {
|
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
|
setterName = if (setterSelector != "set" + name.replaceFirstChar(Char::uppercaseChar) + ":") setterSelector else null
|
||||||
} else {
|
} else {
|
||||||
attributes += "readonly"
|
attributes += "readonly"
|
||||||
|
|||||||
Reference in New Issue
Block a user