FIR: add implementation of reified type parameter references

This adds support of T::class.java for reified type parameters
This commit is contained in:
Mikhail Glukhikh
2019-12-16 17:34:12 +03:00
parent cccb95465e
commit 684bdc44bb
22 changed files with 184 additions and 64 deletions
@@ -36,10 +36,10 @@ fun test8() {}
inline val <reified T> T.test9
get() = @AnnArray(arrayOf(
<!OTHER_ERROR!>T<!>::class,
T::class,
Array<T>::class,
Array<Array<Array<T>>>::class
)) object {}
inline val <reified T> T.test10
get() = @AnnArray([<!OTHER_ERROR!>T<!>::class]) object {}
get() = @AnnArray([T::class]) object {}
@@ -6,7 +6,7 @@ annotation class Ann(vararg val k: KClass<*>)
inline val <reified T> T.test
get() = @Ann(
<!OTHER_ERROR!>T<!>::class,
T::class,
Array<T>::class,
Array<Array<Array<T>>>::class
) object {}
@@ -14,7 +14,7 @@ fun <T : Any> foo() {
}
inline fun <reified T : Any> bar() {
val t3 = <!OTHER_ERROR!>T<!>?::class
val t3 = T?::class
}
val m = Map<String>::class
@@ -17,11 +17,11 @@ public class A {
// types checked by txt file
// FILE: 1.kt
inline fun <reified X> test1() = <!OTHER_ERROR!>X<!>::class.<!INAPPLICABLE_CANDIDATE!>java<!>
inline fun <reified X : Any> test2() = <!OTHER_ERROR!>X<!>::class.<!INAPPLICABLE_CANDIDATE!>java<!>
inline fun <reified X : Any?> test3() = <!OTHER_ERROR!>X<!>::class.<!INAPPLICABLE_CANDIDATE!>java<!>
inline fun <reified X : Number> test4() = <!OTHER_ERROR!>X<!>::class.<!INAPPLICABLE_CANDIDATE!>java<!>
inline fun <reified X : Number?> test5() = <!OTHER_ERROR!>X<!>::class.<!INAPPLICABLE_CANDIDATE!>java<!>
inline fun <reified X> test1() = X::class.java
inline fun <reified X : Any> test2() = X::class.java
inline fun <reified X : Any?> test3() = X::class.java
inline fun <reified X : Number> test4() = X::class.java
inline fun <reified X : Number?> test5() = X::class.java
fun test6() = A.getA()::class.java
fun test7() = A.getKClass().java
@@ -3,7 +3,7 @@
inline fun<reified T> foo(block: () -> T): String = block().toString()
inline fun <reified T: Any> javaClass(): Class<T> = <!OTHER_ERROR!>T<!>::class.<!INAPPLICABLE_CANDIDATE!>java<!>
inline fun <reified T: Any> javaClass(): Class<T> = T::class.java
fun box() {
val a = arrayOf(null!!)