// WITH_STDLIB // FILE: stdlib.kt package kotlinx.cinterop abstract class CStructVar interface ObjCObject abstract class ObjCObjectBase : ObjCObject // FILE: cnames.kt package cnames.structs class FwdStruct {} // FILE: objcnamesClasses.kt package objcnames.classes class FwdObjcClass {} // FILE: objcnamesProtocols.kt package objcnames.protocols interface FwdProtocol {} // FILE: lib.kt package lib import kotlinx.cinterop.* class FwdStruct : CStructVar() class FwdObjcClass : ObjCObjectBase() interface FwdProtocol : ObjCObject // FILE: lib2.kt package lib2 class FwdStruct class FwdObjcClass interface FwdProtocol // FILE: main.kt // this inspections differs in K1/K2, but unrelated to what is tested in this test @file:Suppress("UNUSED_PARAMETER", "UNUSED_EXPRESSION", "UNUSED_VARIABLE", "INCOMPATIBLE_TYPES") fun testUnckeckedAsFromAny(x: Any) { x as? cnames.structs.FwdStruct x as? objcnames.classes.FwdObjcClass x as? objcnames.protocols.FwdProtocol if (1 > 0) { x as cnames.structs.FwdStruct } if (1 > 0) { x as objcnames.classes.FwdObjcClass } if (1 > 0) { x as objcnames.protocols.FwdProtocol } } fun testIs(x: Any) : Int { return when { x is cnames.structs.FwdStruct -> 1 x is objcnames.classes.FwdObjcClass -> 2 x is objcnames.protocols.FwdProtocol -> 3 else -> 4 } } fun testIs2(x: lib.FwdStruct) = x is cnames.structs.FwdStruct fun testIs3(x: lib.FwdObjcClass) = x is objcnames.classes.FwdObjcClass fun testIs4(x: lib.FwdProtocol) = x is objcnames.protocols.FwdProtocol fun testClass1(x : cnames.structs.FwdStruct) = x::class fun testClass2(x : objcnames.classes.FwdObjcClass) = x::class fun testClass3(x : objcnames.protocols.FwdProtocol) = x::class fun testClass4() { cnames.structs.FwdStruct::class objcnames.classes.FwdObjcClass::class objcnames.protocols.FwdProtocol::class } inline fun inlineF(x: T) {} fun testInline1(x : cnames.structs.FwdStruct) = inlineF(x) fun testInline2(x : objcnames.classes.FwdObjcClass) = inlineF(x) fun testInline3(x : objcnames.protocols.FwdProtocol) = inlineF(x) fun testInline4() { val a : (cnames.structs.FwdStruct) -> Unit = ::inlineF val b : (objcnames.classes.FwdObjcClass) -> Unit = ::inlineF val c : (objcnames.protocols.FwdProtocol) -> Unit = ::inlineF } fun testCheckedAs1(x : lib.FwdStruct) = x as cnames.structs.FwdStruct fun testCheckedAs2(x : lib.FwdObjcClass) = x as objcnames.classes.FwdObjcClass fun testCheckedAs3(x : lib.FwdProtocol) = x as objcnames.protocols.FwdProtocol fun testCheckedSafeAs4(x : lib.FwdStruct) = x as? cnames.structs.FwdStruct fun testCheckedSafeAs5(x : lib.FwdObjcClass) = x as? objcnames.classes.FwdObjcClass fun testCheckedSafeAs6(x : lib.FwdProtocol) = x as? objcnames.protocols.FwdProtocol fun testUnCheckedAs1(x : lib2.FwdStruct) = x as cnames.structs.FwdStruct fun testUnCheckedAs2(x : lib2.FwdObjcClass) = x as objcnames.classes.FwdObjcClass fun testUnCheckedAs3(x : lib2.FwdProtocol) = x as objcnames.protocols.FwdProtocol fun testUnCheckedAs4(x : lib.FwdStruct) = x as objcnames.classes.FwdObjcClass