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)
|
assert(superDescriptor.name == subDescriptor.name)
|
||||||
|
|
||||||
val superClass = superDescriptor.containingDeclaration as? ClassDescriptor
|
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 ExternalOverridabilityCondition.Result.UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
return if (areSelectorsEqual(superDescriptor, subDescriptor)) {
|
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 {
|
} else {
|
||||||
ExternalOverridabilityCondition.Result.INCOMPATIBLE
|
ExternalOverridabilityCondition.Result.INCOMPATIBLE
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ fun MutablePairProtocol.swap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Bar : Foo() {
|
class Bar : Foo() {
|
||||||
override fun helloWithPrinter(printer: PrinterProtocol) = memScoped {
|
override fun helloWithPrinter(printer: PrinterProtocol?) = memScoped {
|
||||||
printer.print("Hello from Kotlin".cstr.getPointer(memScope))
|
printer!!.print("Hello from Kotlin".cstr.getPointer(memScope))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user