Enable method signature checks when overriding Objective-C method

This commit is contained in:
Svyatoslav Scherbina
2017-10-12 18:27:35 +03:00
committed by SvyatoslavScherbina
parent 11a11378ff
commit a0dc2ecef2
2 changed files with 11 additions and 4 deletions
@@ -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
}
+2 -2
View File
@@ -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))
}
}