Enable method signature checks when overriding Objective-C method
This commit is contained in:
committed by
SvyatoslavScherbina
parent
11a11378ff
commit
a0dc2ecef2
+9
-2
@@ -133,12 +133,19 @@ class ObjCOverridabilityCondition : ExternalOverridabilityCondition {
|
||||
assert(superDescriptor.name == subDescriptor.name)
|
||||
|
||||
val superClass = superDescriptor.containingDeclaration as? ClassDescriptor
|
||||
if (superClass == null || !superClass.isObjCClass()) {
|
||||
val subClass = subDescriptor.containingDeclaration as? ClassDescriptor
|
||||
|
||||
if (superClass == null || !superClass.isObjCClass() || subClass == null) {
|
||||
return ExternalOverridabilityCondition.Result.UNKNOWN
|
||||
}
|
||||
|
||||
return if (areSelectorsEqual(superDescriptor, subDescriptor)) {
|
||||
ExternalOverridabilityCondition.Result.OVERRIDABLE
|
||||
// Also check the method signatures if the subclass is user-defined:
|
||||
if (subClass.isExternalObjCClass()) {
|
||||
ExternalOverridabilityCondition.Result.OVERRIDABLE
|
||||
} else {
|
||||
ExternalOverridabilityCondition.Result.UNKNOWN
|
||||
}
|
||||
} else {
|
||||
ExternalOverridabilityCondition.Result.INCOMPATIBLE
|
||||
}
|
||||
|
||||
@@ -48,8 +48,8 @@ fun MutablePairProtocol.swap() {
|
||||
}
|
||||
|
||||
class Bar : Foo() {
|
||||
override fun helloWithPrinter(printer: PrinterProtocol) = memScoped {
|
||||
printer.print("Hello from Kotlin".cstr.getPointer(memScope))
|
||||
override fun helloWithPrinter(printer: PrinterProtocol?) = memScoped {
|
||||
printer!!.print("Hello from Kotlin".cstr.getPointer(memScope))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user