6e8283a6fe
The reason #1 for this feature is that we want to test IdSignatures generated for declarations. Currently, there is no (easy) way to ensure that a change in the signature building logic doesn't cause any breaking changes wrt klibs. Now, most IdSignatures include hashed mangled names in them, so even if we catch a regression where the included hash changes, there would be no way of knowing immediately what caused it, unless we'd also have mangled names in the expectations. The reason #2 is to test the manglers themselves. Currently, there are no tests for them. They heavily duplicate each other, this is already causing issues (see KT-57427) that would be very hard to catch without these tests. ^KT-58238 Fixed
37 lines
1003 B
Kotlin
Vendored
37 lines
1003 B
Kotlin
Vendored
// WITH_STDLIB
|
|
// WITH_REFLECT
|
|
// DUMP_LOCAL_DECLARATION_SIGNATURES
|
|
|
|
// MUTE_SIGNATURE_COMPARISON_K2: ANY
|
|
// ^ KT-57429, KT-57430
|
|
|
|
import kotlin.properties.ReadWriteProperty
|
|
import kotlin.reflect.KClass
|
|
import kotlin.reflect.KProperty
|
|
|
|
class SettingType<out V : Any>(
|
|
val type : KClass<out V>
|
|
)
|
|
|
|
class SettingReference<V : Any, T : SettingType<V>>(
|
|
var t : T,
|
|
var v : V
|
|
)
|
|
|
|
class IdeWizard {
|
|
var projectTemplate by setting(SettingReference(SettingType(42::class), 42))
|
|
|
|
private fun <V : Any, T : SettingType<V>> setting(reference: SettingReference<V, T>) =
|
|
object : ReadWriteProperty<Any?, V?> {
|
|
override fun setValue(thisRef: Any?, property: KProperty<*>, value: V?) {
|
|
if (value == null) return
|
|
reference.t = SettingType(value::class) as T
|
|
reference.v = value
|
|
}
|
|
|
|
override fun getValue(thisRef: Any?, property: KProperty<*>): V? {
|
|
return reference.v
|
|
}
|
|
}
|
|
}
|