[K/N] Remove platform-dependent overridability check for properties

^KT-57640 Fixed
This commit is contained in:
Vladimir Sukharev
2024-01-16 17:57:59 +01:00
committed by Space Team
parent 9613d0e8dc
commit 117ce133bf
2 changed files with 3 additions and 19 deletions
@@ -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
@@ -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).