[K/N] Add error when companion of non-Obj-C-subclass inherits Obj-C meta
Fixes KT-50109
This commit is contained in:
+5
-4
@@ -19,10 +19,7 @@ import org.jetbrains.kotlin.backend.konan.ir.*
|
|||||||
import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny
|
import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType
|
import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType
|
import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
|
||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
|
||||||
import org.jetbrains.kotlin.descriptors.isFinalClass
|
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
@@ -229,6 +226,10 @@ private class BackendChecker(val context: Context, val irFile: IrFile) : IrEleme
|
|||||||
reportError(irClass, "Fields are not supported for Companion of subclass of ObjC type")
|
reportError(irClass, "Fields are not supported for Companion of subclass of ObjC type")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (irClass.isObjCMetaClass() && (irClass.isCompanion && !irClass.parentAsClass.isKotlinObjCClass() || irClass.kind.isClass)) {
|
||||||
|
reportError(irClass, "Only companion objects of subclasses of Objective-C classes can inherit from Objective-C metaclasses")
|
||||||
|
}
|
||||||
|
|
||||||
var hasObjCClassSupertype = false
|
var hasObjCClassSupertype = false
|
||||||
irClass.descriptor.defaultType.constructor.supertypes.forEach {
|
irClass.descriptor.defaultType.constructor.supertypes.forEach {
|
||||||
val descriptor = it.constructor.declarationDescriptor as ClassDescriptor
|
val descriptor = it.constructor.declarationDescriptor as ClassDescriptor
|
||||||
|
|||||||
Reference in New Issue
Block a user