/* * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license * that can be found in the LICENSE file. */ // JVM_ABI_K1_K2_DIFF: KT-63864 // Unsupported [This reflection API is not supported yet in JavaScript] // IGNORE_BACKEND: JS_IR, JS_IR_ES6, WASM // WITH_STDLIB package codegen.kclass.kclass1 import kotlin.test.* val sb = StringBuilder() fun box(): String { App(testQualified = true) return sb.toString() } // Taken from: // https://github.com/SalomonBrys/kmffkn/blob/master/shared/main/kotlin/com/github/salomonbrys/kmffkn/app.kt @DslMarker annotation class MyDsl @MyDsl class DslMain { fun kClass(block: KClassDsl.() -> T): T = KClassDsl().block() } @MyDsl class KClassDsl { inline fun of() = T::class } fun dsl(block: DslMain.() -> T): T = DslMain().block() class TestClass @OptIn(kotlin.experimental.ExperimentalNativeApi::class) class App(testQualified: Boolean) { var type = dsl { kClass { //kClass { } // This should error if uncommented because of `@DslMarker`. of() } } init { assertTrue(type.simpleName == "TestClass") if (testQualified) assertTrue(type.qualifiedName == "codegen.kclass.kclass1.TestClass") // This is not really necessary, but always better :). assertTrue(String::class == String::class) assertTrue(String::class != Int::class) assertTrue(TestClass()::class == TestClass()::class) assertTrue(TestClass()::class == TestClass::class) sb.append("OK") } }