// WITH_STDLIB // MODULE: lib1 // FILE: DemoClassInternal1.kt abstract class DemoClassInternal { @PublishedApi internal open fun demo(): Int = 1 } // FILE: TestDemo1.kt inline fun testDemoInline(d: DemoClassInternal): Int = d.demo() fun testDemo(d: DemoClassInternal): Int = d.demo() // MODULE: main(lib1) // FILE: MyDemo.kt open class MyDemo1 : DemoClassInternal() class MyDemo2 : DemoClassInternal() { fun demo(): Int = 2 } open class MyDemo3 : DemoClassInternal() { open fun demo(): Int = 3 } class MyDemo4: MyDemo1() class MyDemo5: MyDemo1() { fun demo(): Int = 5 } class MyDemo6: MyDemo3() class MyDemo7: MyDemo3() { override fun demo(): Int = 7 } // FILE: Box.kt import kotlin.test.assertEquals fun testMyDemo1() { val myDemo = MyDemo1() assertEquals(testDemoInline(myDemo), 1) assertEquals(testDemo(myDemo), 1) } fun testMyDemo2() { val myDemo = MyDemo2() assertEquals(testDemoInline(myDemo), 2) assertEquals(testDemo(myDemo), 2) assertEquals(myDemo.demo(), 2) } fun testMyDemo3() { val myDemo = MyDemo3() assertEquals(testDemoInline(myDemo), 3) assertEquals(testDemo(myDemo), 3) assertEquals(myDemo.demo(), 3) } fun testMyDemo4() { val myDemo = MyDemo4() assertEquals(testDemoInline(myDemo), 1) assertEquals(testDemo(myDemo), 1) } fun testMyDemo5() { val myDemo = MyDemo5() assertEquals(testDemoInline(myDemo), 5) assertEquals(testDemo(myDemo), 5) assertEquals(myDemo.demo(), 5) } fun testMyDemo6() { val myDemo = MyDemo6() assertEquals(testDemoInline(myDemo), 3) assertEquals(testDemo(myDemo), 3) assertEquals(myDemo.demo(), 3) } fun testMyDemo7() { val myDemo = MyDemo7() assertEquals(testDemoInline(myDemo), 7) assertEquals(testDemo(myDemo), 7) assertEquals(myDemo.demo(), 7) } fun box(): String { testMyDemo1() testMyDemo2() testMyDemo3() testMyDemo4() testMyDemo5() testMyDemo6() testMyDemo7() return "OK" }