[K/N] Remove platform-dependent overridability check for properties
^KT-57640 Fixed
This commit is contained in:
committed by
Space Team
parent
9613d0e8dc
commit
117ce133bf
+2
-13
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.backend.native
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.backend.native.interop.decodeObjCMethodAnnotation
|
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.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
@@ -28,18 +27,8 @@ class FirNativeOverrideChecker(private val session: FirSession) : FirOverrideChe
|
|||||||
?: standardOverrideChecker.isOverriddenFunction(overrideCandidate, baseDeclaration)
|
?: standardOverrideChecker.isOverriddenFunction(overrideCandidate, baseDeclaration)
|
||||||
|
|
||||||
override fun isOverriddenProperty(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirProperty): Boolean =
|
override fun isOverriddenProperty(overrideCandidate: FirCallableDeclaration, baseDeclaration: FirProperty): Boolean =
|
||||||
overrideCandidate.isPlatformOverriddenProperty(baseDeclaration)
|
// KT-57640: There's no necessity to implement platform-dependent overridability check for properties
|
||||||
?: standardOverrideChecker.isOverriddenProperty(overrideCandidate, 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
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mimics ObjCOverridabilityCondition.isOverridable
|
* mimics ObjCOverridabilityCondition.isOverridable
|
||||||
|
|||||||
+1
-6
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.ir.objcinterop
|
|||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition
|
import org.jetbrains.kotlin.resolve.ExternalOverridabilityCondition
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,6 +32,7 @@ class ObjCOverridabilityCondition : ExternalOverridabilityCondition {
|
|||||||
subClassDescriptor: ClassDescriptor?
|
subClassDescriptor: ClassDescriptor?
|
||||||
): ExternalOverridabilityCondition.Result {
|
): ExternalOverridabilityCondition.Result {
|
||||||
if (superDescriptor.name == subDescriptor.name) { // Slow path:
|
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) {
|
if (superDescriptor is FunctionDescriptor && subDescriptor is FunctionDescriptor) {
|
||||||
superDescriptor.getExternalObjCMethodInfo()?.let { superInfo ->
|
superDescriptor.getExternalObjCMethodInfo()?.let { superInfo ->
|
||||||
val subInfo = subDescriptor.getExternalObjCMethodInfo()
|
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
|
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 {
|
private fun parameterNamesMatch(first: FunctionDescriptor, second: FunctionDescriptor): Boolean {
|
||||||
// The original Objective-C method selector is represented as
|
// The original Objective-C method selector is represented as
|
||||||
// function name and parameter names (except first).
|
// function name and parameter names (except first).
|
||||||
|
|||||||
Reference in New Issue
Block a user