From 117ce133bffdc651d87dc95003a5126b9f294f3f Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Tue, 16 Jan 2024 17:57:59 +0100 Subject: [PATCH] [K/N] Remove platform-dependent overridability check for properties ^KT-57640 Fixed --- .../backend/native/FirNativeOverrideChecker.kt | 15 ++------------- .../ir/objcinterop/ObjCOverridabilityCondition.kt | 7 +------ 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeOverrideChecker.kt b/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeOverrideChecker.kt index 3e26de06666..7b0fd2ebfce 100644 --- a/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeOverrideChecker.kt +++ b/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/FirNativeOverrideChecker.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.backend.native import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.native.interop.decodeObjCMethodAnnotation -import org.jetbrains.kotlin.fir.backend.native.interop.isExternalObjCClassProperty import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction @@ -28,18 +27,8 @@ class FirNativeOverrideChecker(private val session: FirSession) : FirOverrideChe ?: standardOverrideChecker.isOverriddenFunction(overrideCandidate, baseDeclaration) override fun isOverriddenProperty(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirProperty): Boolean = - overrideCandidate.isPlatformOverriddenProperty(baseDeclaration) - ?: standardOverrideChecker.isOverriddenProperty(overrideCandidate, baseDeclaration) - - // FIXME KT-57640: Revise the necessity of platform-specific property overridability handling - private fun FirCallableDeclaration.isPlatformOverriddenProperty(baseDeclaration: FirProperty): Boolean? { - if (this !is FirProperty || name != baseDeclaration.name) { - return null - } - if (this.isExternalObjCClassProperty(session) && baseDeclaration.isExternalObjCClassProperty(session)) - return true - return null - } + // KT-57640: There's no necessity to implement platform-dependent overridability check for properties + standardOverrideChecker.isOverriddenProperty(overrideCandidate, baseDeclaration) /** * mimics ObjCOverridabilityCondition.isOverridable diff --git a/compiler/ir/ir.objcinterop/src/org/jetbrains/kotlin/ir/objcinterop/ObjCOverridabilityCondition.kt b/compiler/ir/ir.objcinterop/src/org/jetbrains/kotlin/ir/objcinterop/ObjCOverridabilityCondition.kt index 4a132520cc7..4fcbef11769 100644 --- a/compiler/ir/ir.objcinterop/src/org/jetbrains/kotlin/ir/objcinterop/ObjCOverridabilityCondition.kt +++ b/compiler/ir/ir.objcinterop/src/org/jetbrains/kotlin/ir/objcinterop/ObjCOverridabilityCondition.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.ir.objcinterop import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition /** @@ -33,6 +32,7 @@ class ObjCOverridabilityCondition : ExternalOverridabilityCondition { subClassDescriptor: ClassDescriptor? ): ExternalOverridabilityCondition.Result { if (superDescriptor.name == subDescriptor.name) { // Slow path: + // KT-57640: There's no necessity to implement platform-dependent overridability check for properties if (superDescriptor is FunctionDescriptor && subDescriptor is FunctionDescriptor) { superDescriptor.getExternalObjCMethodInfo()?.let { superInfo -> val subInfo = subDescriptor.getExternalObjCMethodInfo() @@ -51,17 +51,12 @@ class ObjCOverridabilityCondition : ExternalOverridabilityCondition { } } } - } else if (superDescriptor.isExternalObjCClassProperty() && subDescriptor.isExternalObjCClassProperty()) { - return ExternalOverridabilityCondition.Result.OVERRIDABLE } } return ExternalOverridabilityCondition.Result.UNKNOWN } - private fun CallableDescriptor.isExternalObjCClassProperty() = this is PropertyDescriptor && - (this.containingDeclaration as? ClassDescriptor)?.isExternalObjCClass() == true - private fun parameterNamesMatch(first: FunctionDescriptor, second: FunctionDescriptor): Boolean { // The original Objective-C method selector is represented as // function name and parameter names (except first).