Support reflection tests on Android
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
// WITH_REFLECT
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR, JS, NATIVE
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
annotation class Ann1
|
||||
@@ -16,6 +18,6 @@ fun box(): String {
|
||||
val setterParameters = Foo::delegate.setter.parameters
|
||||
assertEquals(2, setterParameters.size)
|
||||
assertEquals("[]", setterParameters.first().annotations.toString())
|
||||
assertEquals("[@Ann2(), @Ann1()]", setterParameters.last().annotations.toString())
|
||||
assertEquals("[@test.Ann2(), @test.Ann1()]", setterParameters.last().annotations.toString())
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
class A
|
||||
|
||||
data class D(val s: String)
|
||||
@@ -14,7 +16,7 @@ fun box(): String {
|
||||
assert(A::equals.call(a, a))
|
||||
assert(!A::equals.call(a, 0))
|
||||
assert(A::hashCode.call(a) == A::hashCode.call(a))
|
||||
assert(A::toString.call(a).startsWith("A@"))
|
||||
assert(A::toString.call(a).startsWith("test.A@"))
|
||||
|
||||
assert(D::equals.call(D("foo"), D("foo")))
|
||||
assert(!D::equals.call(D("foo"), D("bar")))
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertTrue
|
||||
import kotlin.reflect.jvm.jvmName
|
||||
@@ -12,17 +14,17 @@ class Klass {
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("Klass", Klass::class.jvmName)
|
||||
assertEquals("Klass\$Nested", Klass.Nested::class.jvmName)
|
||||
assertEquals("Klass\$Companion", Klass.Companion::class.jvmName)
|
||||
assertEquals("test.Klass", Klass::class.jvmName)
|
||||
assertEquals("test.Klass\$Nested", Klass.Nested::class.jvmName)
|
||||
assertEquals("test.Klass\$Companion", Klass.Companion::class.jvmName)
|
||||
|
||||
class Local
|
||||
val l = Local::class.jvmName
|
||||
assertTrue(l != null && l.startsWith("JvmNameKt\$") && "\$box\$" in l && l.endsWith("\$Local"))
|
||||
assertTrue(l != null && l.startsWith("test.JvmNameKt\$") && "\$box\$" in l && l.endsWith("\$Local"))
|
||||
|
||||
val obj = object {}
|
||||
val o = obj.javaClass.kotlin.jvmName
|
||||
assertTrue(o != null && o.startsWith("JvmNameKt\$") && "\$box\$" in o && o.endsWith("\$1"))
|
||||
assertTrue(o != null && o.startsWith("test.JvmNameKt\$") && "\$box\$" in o && o.endsWith("\$1"))
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class Klass {
|
||||
@@ -11,9 +13,9 @@ class Klass {
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("Klass", Klass::class.qualifiedName)
|
||||
assertEquals("Klass.Nested", Klass.Nested::class.qualifiedName)
|
||||
assertEquals("Klass.Companion", Klass.Companion::class.qualifiedName)
|
||||
assertEquals("test.Klass", Klass::class.qualifiedName)
|
||||
assertEquals("test.Klass.Nested", Klass.Nested::class.qualifiedName)
|
||||
assertEquals("test.Klass.Companion", Klass.Companion::class.qualifiedName)
|
||||
|
||||
class Local
|
||||
assertEquals(null, Local::class.qualifiedName)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// IGNORE_BACKEND: JS_IR, JS, NATIVE
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@@ -18,7 +19,7 @@ enum class TestEnum(val id: String? = null) {
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(listOf("fun <init>(kotlin.String?): TestEnum"), TestEnum.ENUM1::class.constructors.map { it.toString() })
|
||||
assertEquals(listOf("fun <init>(kotlin.String?): test.TestEnum"), TestEnum.ENUM1::class.constructors.map { it.toString() })
|
||||
assertEquals(listOf(), TestEnum.ENUM2::class.constructors.map { it.toString() })
|
||||
|
||||
return "OK"
|
||||
|
||||
+2
-1
@@ -4,6 +4,7 @@
|
||||
// IGNORE_BACKEND: JS, NATIVE
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.test.assertEquals
|
||||
@@ -13,6 +14,6 @@ annotation class Anno(val klasses: Array<KClass<*>> = arrayOf(String::class, Int
|
||||
fun box(): String {
|
||||
val anno = Anno::class.constructors.single().callBy(emptyMap())
|
||||
assertEquals(listOf(String::class, Int::class), anno.klasses.toList())
|
||||
assertEquals("@Anno(klasses=[class java.lang.String, int])", anno.toString())
|
||||
assertEquals("@test.Anno(klasses=[class java.lang.String, int])", anno.toString())
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+3
-2
@@ -4,6 +4,7 @@
|
||||
// IGNORE_BACKEND: JS, NATIVE
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.test.assertEquals
|
||||
@@ -45,8 +46,8 @@ fun box(): String {
|
||||
assertEquals(a2, a1)
|
||||
assertEquals(a1.hashCode(), a2.hashCode())
|
||||
|
||||
assertEquals("@Anno(level=WARNING, klass=class java.lang.Number, foo=@Foo(value=OK), " +
|
||||
"levels=[WARNING], klasses=[class java.lang.Number], foos=[@Foo(value=OK)])", a1.toString())
|
||||
assertEquals("@test.Anno(level=WARNING, klass=class java.lang.Number, foo=@test.Foo(value=OK), " +
|
||||
"levels=[WARNING], klasses=[class java.lang.Number], foos=[@test.Foo(value=OK)])", a1.toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+3
-1
@@ -5,6 +5,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
annotation class Anno(
|
||||
@@ -79,7 +81,7 @@ fun box(): String {
|
||||
assertEquals(a2, a1)
|
||||
assertEquals(a1.hashCode(), a2.hashCode())
|
||||
|
||||
assertEquals("@Anno(b=1, c=x, d=3.14, f=-2.72, i=42424242, j=239239239239239, s=42, z=true, " +
|
||||
assertEquals("@test.Anno(b=1, c=x, d=3.14, f=-2.72, i=42424242, j=239239239239239, s=42, z=true, " +
|
||||
"ba=[-1], ca=[y], da=[-3.14159], fa=[2.7218], ia=[424242], ja=[239239239239], sa=[-43], za=[false, true], " +
|
||||
"str=lol, stra=[rofl])", a1.toString())
|
||||
|
||||
|
||||
@@ -2,14 +2,16 @@
|
||||
// IGNORE_BACKEND: JS_IR, JS, NATIVE
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
enum class E { X, Y, Z }
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("fun values(): kotlin.Array<E>", E::values.toString())
|
||||
assertEquals("fun values(): kotlin.Array<test.E>", E::values.toString())
|
||||
assertEquals(listOf(E.X, E.Y, E.Z), E::values.call().toList())
|
||||
assertEquals("fun valueOf(kotlin.String): E", E::valueOf.toString())
|
||||
assertEquals("fun valueOf(kotlin.String): test.E", E::valueOf.toString())
|
||||
assertEquals(E.Y, E::valueOf.call("Y"))
|
||||
|
||||
return "OK"
|
||||
|
||||
+3
-1
@@ -5,6 +5,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
interface H<T> {
|
||||
@@ -14,7 +16,7 @@ interface H<T> {
|
||||
interface A : H<A>
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("A?", A::foo.returnType.toString())
|
||||
assertEquals("test.A?", A::foo.returnType.toString())
|
||||
assertEquals("T?", H<A>::foo.returnType.toString())
|
||||
|
||||
return "OK"
|
||||
|
||||
+6
-4
@@ -3,6 +3,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
//test for KT-3722 Write correct generic type information for generated fields
|
||||
package test
|
||||
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class Z<T> {
|
||||
@@ -50,25 +52,25 @@ fun box(): String {
|
||||
|
||||
val classField = clz.getDeclaredField("classField1");
|
||||
|
||||
if (classField.getGenericType().toString() != "Z<T>")
|
||||
if (classField.getGenericType().toString() != "test.Z<T>")
|
||||
return "fail1: " + classField.getGenericType();
|
||||
|
||||
|
||||
val classField2 = clz.getDeclaredField("classField2");
|
||||
|
||||
if (classField2.getGenericType().toString() != "Z<java.lang.String>")
|
||||
if (classField2.getGenericType().toString() != "test.Z<java.lang.String>")
|
||||
return "fail2: " + classField2.getGenericType();
|
||||
|
||||
|
||||
val classField3 = clz.getDeclaredField("classField3");
|
||||
|
||||
if (classField3.getGenericType().toString() != "Zout<java.lang.String>")
|
||||
if (classField3.getGenericType().toString() != "test.Zout<java.lang.String>")
|
||||
return "fail3: " + classField3.getGenericType();
|
||||
|
||||
|
||||
val classField4 = clz.getDeclaredField("classField4");
|
||||
|
||||
if (classField4.getGenericType().toString() != "Zin<TParam>")
|
||||
if (classField4.getGenericType().toString() != "test.Zin<test.TParam>")
|
||||
return "fail4: " + classField4.getGenericType();
|
||||
|
||||
val classField5 = clz.getDeclaredField("delegateLazy\$delegate");
|
||||
|
||||
+6
-4
@@ -2,6 +2,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
class Z<T> {}
|
||||
|
||||
class TParam {}
|
||||
@@ -30,10 +32,10 @@ fun box(): String {
|
||||
|
||||
val params = listOf(
|
||||
Params(1, Any::class.java, "T", "T"),
|
||||
Params(2, Z::class.java, "Z<T>", "Z<T>"),
|
||||
Params(3, Z::class.java, "Z<java.lang.String>", "Z<java.lang.String>"),
|
||||
Params(4, Any::class.java, "Zout<java.lang.String>", "X"),
|
||||
Params(5, Any::class.java, "Zin<TParam>", "Y")
|
||||
Params(2, Z::class.java, "test.Z<T>", "test.Z<T>"),
|
||||
Params(3, Z::class.java, "test.Z<java.lang.String>", "test.Z<java.lang.String>"),
|
||||
Params(4, Any::class.java, "test.Zout<java.lang.String>", "X"),
|
||||
Params(5, Any::class.java, "test.Zin<test.TParam>", "Y")
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
class B<M>
|
||||
|
||||
@@ -17,12 +18,12 @@ interface A<T, Y : B<T>> {
|
||||
|
||||
|
||||
fun box(): String {
|
||||
val defaultImpls = Class.forName("A\$DefaultImpls")
|
||||
val defaultImpls = Class.forName("test.A\$DefaultImpls")
|
||||
val declaredMethod = defaultImpls.getDeclaredMethod("p", A::class.java, Any::class.java)
|
||||
if (declaredMethod.toGenericString() != "public static <T_I1,Y,T,L> T A\$DefaultImpls.p(A<T_I1, Y>,T)") return "fail 1: ${declaredMethod.toGenericString()}"
|
||||
if (declaredMethod.toGenericString() != "public static <T_I1,Y,T,L> T test.A\$DefaultImpls.p(test.A<T_I1, Y>,T)") return "fail 1: ${declaredMethod.toGenericString()}"
|
||||
|
||||
val declaredProperty = defaultImpls.getDeclaredMethod("getZ", A::class.java, Any::class.java)
|
||||
if (declaredProperty.toGenericString() != "public static <T_I1,Y,T> T A\$DefaultImpls.getZ(A<T_I1, Y>,T)") return "fail 2: ${declaredProperty.toGenericString()}"
|
||||
if (declaredProperty.toGenericString() != "public static <T_I1,Y,T> T test.A\$DefaultImpls.getZ(test.A<T_I1, Y>,T)") return "fail 2: ${declaredProperty.toGenericString()}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+3
-2
@@ -1,5 +1,6 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.reflect.jvm.javaMethod
|
||||
import kotlin.test.assertEquals
|
||||
@@ -20,8 +21,8 @@ interface C : B2
|
||||
abstract class D : B1, C
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("public abstract void A1.a1()", D::a1.javaMethod!!.toString())
|
||||
assertEquals("public abstract void A2.a2()", D::a2.javaMethod!!.toString())
|
||||
assertEquals("public abstract void test.A1.a1()", D::a1.javaMethod!!.toString())
|
||||
assertEquals("public abstract void test.A2.a2()", D::a2.javaMethod!!.toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+8
-7
@@ -1,6 +1,7 @@
|
||||
// IGNORE_BACKEND: JVM_IR
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.reflect.KCallable
|
||||
import kotlin.reflect.jvm.*
|
||||
@@ -33,26 +34,26 @@ fun KCallable<*>.getJavaTypesOfParams() = parameters.map { it.type.javaType }.to
|
||||
fun KCallable<*>.getJavaTypeOfResult() = returnType.javaType.toString()
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("[class Z1]", Z1.publicXRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z1.publicXRef.getJavaTypeOfResult())
|
||||
assertEquals("[class test.Z1]", Z1.publicXRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z1.publicXRef.getJavaTypeOfResult())
|
||||
|
||||
assertEquals("[]", Z1.publicXBoundRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z1.publicXBoundRef.getJavaTypeOfResult())
|
||||
|
||||
assertEquals("[class Z2]", Z2.internalXRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z2.internalXRef.getJavaTypeOfResult())
|
||||
assertEquals("[class test.Z2]", Z2.internalXRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z2.internalXRef.getJavaTypeOfResult())
|
||||
|
||||
assertEquals("[]", Z2.internalXBoundRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z2.internalXBoundRef.getJavaTypeOfResult())
|
||||
|
||||
assertEquals("[class Z3]", Z3.privateXRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z3.privateXRef.getJavaTypeOfResult())
|
||||
assertEquals("[class test.Z3]", Z3.privateXRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z3.privateXRef.getJavaTypeOfResult())
|
||||
|
||||
assertEquals("[]", Z3.privateXBoundRef.getJavaTypesOfParams())
|
||||
assertEquals("int", Z3.privateXBoundRef.getJavaTypeOfResult())
|
||||
|
||||
|
||||
assertEquals("[class ZZ]", ZZ::x.getJavaTypesOfParams())
|
||||
assertEquals("[class test.ZZ]", ZZ::x.getJavaTypesOfParams())
|
||||
|
||||
// KT-28170
|
||||
assertEquals("int", ZZ::x.getJavaTypeOfResult())
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
@@ -11,9 +12,9 @@ class A {
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("class A", "${A::class}")
|
||||
assertEquals("class A\$Nested", "${A.Nested::class}")
|
||||
assertEquals("class A\$Companion", "${A.Companion::class}")
|
||||
assertEquals("class test.A", "${A::class}")
|
||||
assertEquals("class test.A\$Nested", "${A.Nested::class}")
|
||||
assertEquals("class test.A\$Companion", "${A.Companion::class}")
|
||||
|
||||
assertEquals("class kotlin.Any", "${Any::class}")
|
||||
assertEquals("class kotlin.Int", "${Int::class}")
|
||||
|
||||
+7
-6
@@ -1,5 +1,6 @@
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR, JS, NATIVE
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@@ -12,16 +13,16 @@ open class B<U> : A<U>()
|
||||
class C : B<String>()
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("fun A<T>.foo(T): kotlin.Unit", A<Double>::foo.toString())
|
||||
assertEquals("fun B<U>.foo(U): kotlin.Unit", B<Float>::foo.toString())
|
||||
assertEquals("fun C.foo(kotlin.String): kotlin.Unit", C::foo.toString())
|
||||
assertEquals("fun test.A<T>.foo(T): kotlin.Unit", A<Double>::foo.toString())
|
||||
assertEquals("fun test.B<U>.foo(U): kotlin.Unit", B<Float>::foo.toString())
|
||||
assertEquals("fun test.C.foo(kotlin.String): kotlin.Unit", C::foo.toString())
|
||||
|
||||
val afoo = A::class.members.single { it.name == "foo" }
|
||||
assertEquals("fun A<T>.foo(T): kotlin.Unit", afoo.toString())
|
||||
assertEquals("fun test.A<T>.foo(T): kotlin.Unit", afoo.toString())
|
||||
val bfoo = B::class.members.single { it.name == "foo" }
|
||||
assertEquals("fun B<U>.foo(U): kotlin.Unit", bfoo.toString())
|
||||
assertEquals("fun test.B<U>.foo(U): kotlin.Unit", bfoo.toString())
|
||||
val cfoo = C::class.members.single { it.name == "foo" }
|
||||
assertEquals("fun C.foo(kotlin.String): kotlin.Unit", cfoo.toString())
|
||||
assertEquals("fun test.C.foo(kotlin.String): kotlin.Unit", cfoo.toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+5
-4
@@ -1,5 +1,6 @@
|
||||
// IGNORE_BACKEND: JVM_IR, JS_IR, JS, NATIVE
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@@ -21,13 +22,13 @@ interface I3 {
|
||||
interface I : I2, I1, I3
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("fun I.f(): kotlin.Unit", I::f.toString())
|
||||
assertEquals("val I.x: kotlin.Int", I::x.toString())
|
||||
assertEquals("fun test.I.f(): kotlin.Unit", I::f.toString())
|
||||
assertEquals("val test.I.x: kotlin.Int", I::x.toString())
|
||||
|
||||
val f = I::class.members.single { it.name == "f" }
|
||||
assertEquals("fun I.f(): kotlin.Unit", f.toString())
|
||||
assertEquals("fun test.I.f(): kotlin.Unit", f.toString())
|
||||
val x = I::class.members.single { it.name == "x" }
|
||||
assertEquals("val I.x: kotlin.Int", x.toString())
|
||||
assertEquals("val test.I.x: kotlin.Int", x.toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+4
-2
@@ -5,6 +5,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.reflect.full.*
|
||||
|
||||
class A {
|
||||
@@ -17,10 +19,10 @@ class A {
|
||||
|
||||
fun box(): String {
|
||||
val p = A::class.memberExtensionProperties.single()
|
||||
return if ("$p" == "var A.(kotlin.String.)id: kotlin.String") "OK" else "Fail $p"
|
||||
return if ("$p" == "var test.A.(kotlin.String.)id: kotlin.String") "OK" else "Fail $p"
|
||||
|
||||
val q = A::class.declaredFunctions.single()
|
||||
if ("$q" != "fun A.(kotlin.Int.)foo(): kotlin.Double") return "Fail q $q"
|
||||
if ("$q" != "fun test.A.(kotlin.Int.)foo(): kotlin.Double") return "Fail q $q"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
fun String?.foo(x: Int, y: Array<Int>, z: IntArray, w: List<Map<Any, A<*>>>) {}
|
||||
@@ -22,7 +24,7 @@ fun box(): String {
|
||||
"kotlin.Int",
|
||||
"kotlin.Array<kotlin.Int>",
|
||||
"kotlin.IntArray",
|
||||
"kotlin.collections.List<kotlin.collections.Map<kotlin.Any, A<*>>>"
|
||||
"kotlin.collections.List<kotlin.collections.Map<kotlin.Any, test.A<*>>>"
|
||||
),
|
||||
String?::foo.parameters.map { it.type.toString() }
|
||||
)
|
||||
@@ -30,11 +32,11 @@ fun box(): String {
|
||||
assertEquals("kotlin.Unit", String?::foo.returnType.toString())
|
||||
|
||||
val bar = A::class.members.single { it.name == "bar" }
|
||||
assertEquals(listOf("A<T>", "T", "U"), bar.parameters.map { it.type.toString() })
|
||||
assertEquals(listOf("test.A<T>", "T", "U"), bar.parameters.map { it.type.toString() })
|
||||
assertEquals("T?", bar.returnType.toString())
|
||||
|
||||
assertEquals(
|
||||
listOf("A<in kotlin.Number>", "A<out kotlin.Number>"),
|
||||
listOf("test.A<in kotlin.Number>", "test.A<out kotlin.Number>"),
|
||||
::baz.parameters.map { it.type.toString() }
|
||||
)
|
||||
|
||||
|
||||
+3
-1
@@ -5,6 +5,8 @@
|
||||
|
||||
// WITH_REFLECT
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class A<T1> {
|
||||
@@ -16,6 +18,6 @@ class A<T1> {
|
||||
fun foo(): A<Int>.B<Double, Float>.C<Long> = null!!
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("A<kotlin.Int>.B<kotlin.Double, kotlin.Float>.C<kotlin.Long>", ::foo.returnType.toString())
|
||||
assertEquals("test.A<kotlin.Int>.B<kotlin.Double, kotlin.Float>.C<kotlin.Long>", ::foo.returnType.toString())
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+3
-1
@@ -6,6 +6,8 @@
|
||||
// WITH_REFLECT
|
||||
// KT-13700 Exception obtaining descriptor for property reference
|
||||
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
interface H<T> {
|
||||
@@ -15,7 +17,7 @@ interface H<T> {
|
||||
interface A : H<A>
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("A?", A::parent.returnType.toString())
|
||||
assertEquals("test.A?", A::parent.returnType.toString())
|
||||
assertEquals("T?", H<A>::parent.returnType.toString())
|
||||
|
||||
return "OK"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
// IGNORE_BACKEND: JS, NATIVE
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@@ -11,6 +12,6 @@ data class Box<T>(val element: T)
|
||||
|
||||
fun box(): String {
|
||||
val p = Box<String>::element
|
||||
assertEquals("val Box<T>.element: T", p.toString())
|
||||
assertEquals("val test.Box<T>.element: T", p.toString())
|
||||
return p.call(Box("OK"))
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// IGNORE_BACKEND: JS, NATIVE
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.reflect.full.createType
|
||||
import kotlin.reflect.KClass
|
||||
@@ -22,9 +23,9 @@ fun box(): String {
|
||||
fun KClass<*>.inv() = KTypeProjection.invariant(this.createType())
|
||||
|
||||
val type = A.B.C::class.createType(listOf(Long::class.inv(), Double::class.inv(), Float::class.inv(), Int::class.inv()))
|
||||
assertEquals("A<kotlin.Int>.B<kotlin.Double, kotlin.Float>.C<kotlin.Long>", type.toString())
|
||||
assertEquals("test.A<kotlin.Int>.B<kotlin.Double, kotlin.Float>.C<kotlin.Long>", type.toString())
|
||||
|
||||
assertEquals("A.D", A.D::class.createType().toString())
|
||||
assertEquals("test.A.D", A.D::class.createType().toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
+5
-4
@@ -3,6 +3,7 @@
|
||||
// IGNORE_BACKEND: JS, NATIVE
|
||||
|
||||
// WITH_REFLECT
|
||||
package test
|
||||
|
||||
import kotlin.reflect.full.createType
|
||||
import kotlin.reflect.KTypeProjection
|
||||
@@ -12,11 +13,11 @@ class Foo
|
||||
class Bar<T>
|
||||
|
||||
fun box(): String {
|
||||
assertEquals("Foo", Foo::class.createType().toString())
|
||||
assertEquals("Foo?", Foo::class.createType(nullable = true).toString())
|
||||
assertEquals("test.Foo", Foo::class.createType().toString())
|
||||
assertEquals("test.Foo?", Foo::class.createType(nullable = true).toString())
|
||||
|
||||
assertEquals("Bar<kotlin.String>", Bar::class.createType(listOf(KTypeProjection.invariant(String::class.createType()))).toString())
|
||||
assertEquals("Bar<kotlin.Int>?", Bar::class.createType(listOf(KTypeProjection.invariant(Int::class.createType())), nullable = true).toString())
|
||||
assertEquals("test.Bar<kotlin.String>", Bar::class.createType(listOf(KTypeProjection.invariant(String::class.createType()))).toString())
|
||||
assertEquals("test.Bar<kotlin.Int>?", Bar::class.createType(listOf(KTypeProjection.invariant(Int::class.createType())), nullable = true).toString())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user