From 3a4620cd337a392e8e238ca3380f564b1d428df1 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 27 Jan 2020 12:54:17 +0700 Subject: [PATCH] [StubIr] remove OVERRIDE from modalities 1. CEnum.value should be declared as open override in enums. 2. It is just incorrect. --- .../kotlin/native/interop/gen/ObjCStubs.kt | 16 +++++++--------- .../kotlin/native/interop/gen/StubIr.kt | 7 ++++--- .../native/interop/gen/StubIrElementBuilders.kt | 5 +++-- .../native/interop/gen/StubIrTextEmitter.kt | 7 ++++--- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/ObjCStubs.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/ObjCStubs.kt index 07271db8140..1d97a325d10 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/ObjCStubs.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/ObjCStubs.kt @@ -109,6 +109,8 @@ private class ObjCMethodStubBuilder( private val name: String = method.kotlinName private val origin = StubOrigin.ObjCMethod(method, container) private val modality: MemberStubModality + private val isOverride: Boolean = + container is ObjCClassOrProtocol && method.isOverride(container) init { val returnType = method.getReturnType(container.classOrProtocol) @@ -127,14 +129,8 @@ private class ObjCMethodStubBuilder( kotlinMethodParameters = method.getKotlinParameters(context, forConstructorOrFactory = false) external = (container !is ObjCProtocol) modality = when (container) { - is ObjCClassOrProtocol -> { - if (method.isOverride(container)) { - MemberStubModality.OVERRIDE - } else when (container) { - is ObjCClass -> MemberStubModality.OPEN - is ObjCProtocol -> MemberStubModality.ABSTRACT - } - } + is ObjCClass -> MemberStubModality.OPEN + is ObjCProtocol -> if (method.isOptional) MemberStubModality.OPEN else MemberStubModality.ABSTRACT is ObjCCategory -> MemberStubModality.FINAL } receiver = if (container is ObjCCategory) { @@ -226,7 +222,9 @@ private class ObjCMethodStubBuilder( annotations.toList(), external, receiver, - modality), + modality, + emptyList(), + isOverride), replacement ) } diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt index 41f8802413c..f721b3f9ddc 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIr.kt @@ -213,7 +213,8 @@ class PropertyStub( val modality: MemberStubModality = MemberStubModality.FINAL, val receiverType: StubType? = null, override val annotations: List = emptyList(), - val origin: StubOrigin + val origin: StubOrigin, + val isOverride: Boolean = false ) : StubIrElement, AnnotationHolder { sealed class Kind { class Val( @@ -332,7 +333,6 @@ class FunctionParameterStub( ) : AnnotationHolder enum class MemberStubModality { - OVERRIDE, OPEN, FINAL, ABSTRACT @@ -430,7 +430,8 @@ class FunctionStub( val external: Boolean = false, val receiver: ReceiverParameterStub?, val modality: MemberStubModality, - val typeParameters: List = emptyList() + val typeParameters: List = emptyList(), + val isOverride: Boolean = false ) : StubElementWithOrigin, FunctionalStub { override fun accept(visitor: StubIrVisitor, data: T) = diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt index 8ed122d2162..3f8eaf3419b 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrElementBuilders.kt @@ -214,8 +214,9 @@ internal class EnumStubBuilder( name = "value", type = baseType, kind = PropertyStub.Kind.Val(PropertyAccessor.Getter.GetConstructorParameter(constructorParameter)), - modality = MemberStubModality.OVERRIDE, - origin = StubOrigin.Synthetic) + modality = MemberStubModality.OPEN, + origin = StubOrigin.Synthetic, + isOverride = true) val canonicalsByValue = enumDef.constants .groupingBy { it.value } diff --git a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrTextEmitter.kt b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrTextEmitter.kt index 71e630c1911..59326649218 100644 --- a/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrTextEmitter.kt +++ b/Interop/StubGenerator/src/main/kotlin/org/jetbrains/kotlin/native/interop/gen/StubIrTextEmitter.kt @@ -185,8 +185,9 @@ class StubIrTextEmitter( val parameters = element.parameters.joinToString(prefix = "(", postfix = ")") { renderFunctionParameter(it) } val receiver = element.receiver?.let { renderFunctionReceiver(it) + "." } ?: "" val typeParameters = renderTypeParameters(element.typeParameters) + val override = if (element.isOverride) "override " else "" val modality = renderMemberModality(element.modality, owner) - "${modality}fun$typeParameters $receiver${element.name.asSimpleName()}$parameters: ${renderStubType(element.returnType)}" + "$override${modality}fun$typeParameters $receiver${element.name.asSimpleName()}$parameters: ${renderStubType(element.returnType)}" } if (!nativeBridges.isSupported(element)) { sequenceOf( @@ -302,7 +303,8 @@ class StubIrTextEmitter( private fun emitProperty(element: PropertyStub, owner: StubContainer?) { if (element in bridgeBuilderResult.excludedStubs) return - val modality = renderMemberModality(element.modality, owner) + val override = if (element.isOverride) "override " else "" + val modality = "$override${renderMemberModality(element.modality, owner)}" val receiver = if (element.receiverType != null) "${renderStubType(element.receiverType)}." else "" val name = if (owner?.isTopLevelContainer == true) { getTopLevelPropertyDeclarationName(kotlinFile, element.name) @@ -374,7 +376,6 @@ class StubIrTextEmitter( "" } else when (modality) { - MemberStubModality.OVERRIDE -> "override " MemberStubModality.OPEN -> "open " MemberStubModality.FINAL -> "final " MemberStubModality.ABSTRACT -> "abstract "