Add TypeBinding.

This commit is contained in:
Stanislav Erokhin
2014-08-21 17:50:28 +04:00
parent b2774a9cd0
commit a5c0dda10f
42 changed files with 1137 additions and 1 deletions
@@ -0,0 +1,9 @@
val foo: List<in Int> = null!!
/*
psi: List<in Int>
type: List<in Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: in Int
psi: Int
type: Int
*/
@@ -0,0 +1,13 @@
val foo: List<in List<Int>> = null!!
/*
psi: List<in List<Int>>
type: List<in List<Int>>
typeParameter: <out E> defined in kotlin.List
typeProjection: in List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,22 @@
val foo: Pair<Pair<List<Int>>, String> = null!!
/*
psi: Pair<Pair<List<Int>>, String>
type: Pair<[ERROR : Pair<List<Int>>], String>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: [ERROR : Pair<List<Int>>]
psi: Pair<List<Int>>
type: [ERROR : Pair<List<Int>>]
typeParameter: null
typeProjection: List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: String
psi: String
type: String
*/
@@ -0,0 +1,14 @@
val foo: List<in Int, out Int> = null!!
/*
psi: List<in Int, out Int>
type: [ERROR : List<in Int, out Int>]
typeParameter: null
typeProjection: Int
psi: Int
type: Int
typeParameter: null
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,31 @@
val foo: List<(Pair<Int, Float>) -> List<Int>> = null!!
/*
psi: List<(Pair<Int, Float>) -> List<Int>>
type: List<(Pair<Int, Float>) -> List<Int>>
typeParameter: <out E> defined in kotlin.List
typeProjection: (Pair<Int, Float>) -> List<Int>
psi: (Pair<Int, Float>) -> List<Int>
type: (Pair<Int, Float>) -> List<Int>
typeParameter: <in P1> defined in kotlin.Function1
typeProjection: Pair<Int, Float>
psi: Pair<Int, Float>
type: Pair<Int, Float>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: Int
psi: Int
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: Float
psi: Float
type: Float
typeParameter: <out R> defined in kotlin.Function1
typeProjection: List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,27 @@
val foo: (Pair<Int, Float>) -> List<Int> = null!!
/*
psi: (Pair<Int, Float>) -> List<Int>
type: (Pair<Int, Float>) -> List<Int>
typeParameter: <in P1> defined in kotlin.Function1
typeProjection: Pair<Int, Float>
psi: Pair<Int, Float>
type: Pair<Int, Float>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: Int
psi: Int
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: Float
psi: Float
type: Float
typeParameter: <out R> defined in kotlin.Function1
typeProjection: List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,13 @@
val foo: () -> List<Int> = null!!
/*
psi: () -> List<Int>
type: () -> List<Int>
typeParameter: <out R> defined in kotlin.Function0
typeProjection: List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,22 @@
trait Inv<T>
trait In<in I>
trait Out<out O>
val foo: Inv<in In<in Out<in Int>>> = null!!
/*
psi: Inv<in In<in Out<in Int>>>
type: Inv<in In<in Out<in Int>>>
typeParameter: <T> defined in Inv
typeProjection: in In<in Out<in Int>>
psi: In<in Out<in Int>>
type: In<in Out<in Int>>
typeParameter: <in I> defined in In
typeProjection: in Out<in Int>
psi: Out<in Int>
type: Out<in Int>
typeParameter: <out O> defined in Out
typeProjection: in Int
psi: Int
type: Int
*/
@@ -0,0 +1,5 @@
val fml: Int = 239
/*
psi: Int
type: Int
*/
@@ -0,0 +1,5 @@
val foo: List = null!!
/*
psi: List
type: [ERROR : List]
*/
@@ -0,0 +1,18 @@
val foo: List<String, List<Int>> = null!!
/*
psi: List<String, List<Int>>
type: [ERROR : List<String, List<Int>>]
typeParameter: null
typeProjection: String
psi: String
type: String
typeParameter: null
typeProjection: List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,35 @@
val foo: Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>> = null!!
/*
psi: Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>
type: Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: List<Int?>
psi: List<Int?>
type: List<Int?>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int?
psi: Int?
type: Int?
typeParameter: <out B> defined in kotlin.Pair
typeProjection: Pair<List<Int?>?, List<Int>?>
psi: Pair<List<Int?>?, List<Int>?>
type: Pair<List<Int?>?, List<Int>?>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: List<Int?>?
psi: List<Int?>?
type: List<Int?>?
typeParameter: <out E> defined in kotlin.List
typeProjection: Int?
psi: Int?
type: Int?
typeParameter: <out B> defined in kotlin.Pair
typeProjection: List<Int>?
psi: List<Int>?
type: List<Int>?
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,22 @@
trait Inv<T>
trait In<in I>
trait Out<out O>
val foo: Inv<out In<out Out<out Int>>> = null!!
/*
psi: Inv<out In<out Out<out Int>>>
type: Inv<out In<out Out<out Int>>>
typeParameter: <T> defined in Inv
typeProjection: out In<out Out<out Int>>
psi: In<out Out<out Int>>
type: In<out Out<out Int>>
typeParameter: <in I> defined in In
typeProjection: out Out<out Int>
psi: Out<out Int>
type: Out<out Int>
typeParameter: <out O> defined in Out
typeProjection: out Int
psi: Int
type: Int
*/
@@ -0,0 +1,20 @@
val foo: Pair<List<Int>, String> = null!!
/*
psi: Pair<List<Int>, String>
type: Pair<List<Int>, String>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: List<Int>
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: String
psi: String
type: String
*/
@@ -0,0 +1,10 @@
val foo: List<Int> = null!!
/*
psi: List<Int>
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,6 @@
val foo: List<*> = null!!
/*
psi: List<*>
type: List<Any?>
null
*/
@@ -0,0 +1,15 @@
trait Inv<I>
val foo: Inv<out ((Inv<Int>)?)> = null!!
/*
psi: Inv<out ((Inv<Int>)?)>
type: Inv<out Inv<Int>?>
typeParameter: <I> defined in Inv
typeProjection: out Inv<Int>?
psi: (Inv<Int>)?
type: Inv<Int>?
typeParameter: <I> defined in Inv
typeProjection: Int
psi: Int
type: Int
*/
@@ -0,0 +1,17 @@
val foo: List<adad<List<dd>>> = null!!
/*
psi: List<adad<List<dd>>>
type: List<[ERROR : adad<List<dd>>]>
typeParameter: <out E> defined in kotlin.List
typeProjection: [ERROR : adad<List<dd>>]
psi: adad<List<dd>>
type: [ERROR : adad<List<dd>>]
typeParameter: null
typeProjection: List<[ERROR : dd]>
psi: List<dd>
type: List<[ERROR : dd]>
typeParameter: <out E> defined in kotlin.List
typeProjection: [ERROR : dd]
psi: dd
type: [ERROR : dd]
*/
@@ -0,0 +1,11 @@
fun <T> getT(): T = null!!
val foo = getT<List<in Int>>()
/*
psi: val foo = getT<List<in Int>>()
type: List<in Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: in Int
psi: val foo = getT<List<in Int>>()
type: Int
*/
@@ -0,0 +1,15 @@
fun <T> getT(): T = null!!
val foo = getT<List<in List<Int>>>()
/*
psi: val foo = getT<List<in List<Int>>>()
type: List<in List<Int>>
typeParameter: <out E> defined in kotlin.List
typeProjection: in List<Int>
psi: val foo = getT<List<in List<Int>>>()
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<List<in List<Int>>>()
type: Int
*/
@@ -0,0 +1,16 @@
fun <T> getT(): T = null!!
val foo = getT<Pair<Pair<List<Int>>, String>>()
/*
psi: val foo = getT<Pair<Pair<List<Int>>, String>>()
type: Pair<[ERROR : Pair<List<Int>>], String>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: [ERROR : Pair<List<Int>>]
psi: val foo = getT<Pair<Pair<List<Int>>, String>>()
type: [ERROR : Pair<List<Int>>]
typeParameter: <out B> defined in kotlin.Pair
typeProjection: String
psi: val foo = getT<Pair<Pair<List<Int>>, String>>()
type: String
*/
@@ -0,0 +1,7 @@
fun <T> getT(): T = null!!
val foo = getT<List<in Int, out Int>>()
/*
psi: val foo = getT<List<in Int, out Int>>()
type: [ERROR : List<in Int, out Int>]
*/
@@ -0,0 +1,33 @@
fun <T> getT(): T = null!!
val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
/*
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: List<(Pair<Int, Float>) -> List<Int>>
typeParameter: <out E> defined in kotlin.List
typeProjection: (Pair<Int, Float>) -> List<Int>
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: (Pair<Int, Float>) -> List<Int>
typeParameter: <in P1> defined in kotlin.Function1
typeProjection: Pair<Int, Float>
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: Pair<Int, Float>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: Int
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: Float
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: Float
typeParameter: <out R> defined in kotlin.Function1
typeProjection: List<Int>
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<List<(Pair<Int, Float>) -> List<Int>>>()
type: Int
*/
@@ -0,0 +1,29 @@
fun <T> getT(): T = null!!
val foo = getT<(Pair<Int, Float>) -> List<Int>>()
/*
psi: val foo = getT<(Pair<Int, Float>) -> List<Int>>()
type: (Pair<Int, Float>) -> List<Int>
typeParameter: <in P1> defined in kotlin.Function1
typeProjection: Pair<Int, Float>
psi: val foo = getT<(Pair<Int, Float>) -> List<Int>>()
type: Pair<Int, Float>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: Int
psi: val foo = getT<(Pair<Int, Float>) -> List<Int>>()
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: Float
psi: val foo = getT<(Pair<Int, Float>) -> List<Int>>()
type: Float
typeParameter: <out R> defined in kotlin.Function1
typeProjection: List<Int>
psi: val foo = getT<(Pair<Int, Float>) -> List<Int>>()
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<(Pair<Int, Float>) -> List<Int>>()
type: Int
*/
@@ -0,0 +1,15 @@
fun <T> getT(): T = null!!
val foo = getT<() -> List<Int>>()
/*
psi: val foo = getT<() -> List<Int>>()
type: () -> List<Int>
typeParameter: <out R> defined in kotlin.Function0
typeProjection: List<Int>
psi: val foo = getT<() -> List<Int>>()
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<() -> List<Int>>()
type: Int
*/
@@ -0,0 +1,24 @@
trait Inv<T>
trait In<in I>
trait Out<out O>
fun <T> getT(): T = null!!
val foo = getT<Inv<in In<in Out<in Int>>>>()
/*
psi: val foo = getT<Inv<in In<in Out<in Int>>>>()
type: Inv<in In<in Out<in Int>>>
typeParameter: <T> defined in Inv
typeProjection: in In<in Out<in Int>>
psi: val foo = getT<Inv<in In<in Out<in Int>>>>()
type: In<in Out<in Int>>
typeParameter: <in I> defined in In
typeProjection: in Out<in Int>
psi: val foo = getT<Inv<in In<in Out<in Int>>>>()
type: Out<in Int>
typeParameter: <out O> defined in Out
typeProjection: in Int
psi: val foo = getT<Inv<in In<in Out<in Int>>>>()
type: Int
*/
@@ -0,0 +1,7 @@
fun <T> getT(): T = null!!
val fml = getT<Int>()
/*
psi: val fml = getT<Int>()
type: Int
*/
@@ -0,0 +1,7 @@
fun <T> getT(): T = null!!
val foo = getT<List>()
/*
psi: val foo = getT<List>()
type: [ERROR : List]
*/
@@ -0,0 +1,7 @@
fun <T> getT(): T = null!!
val foo = getT<List<String, List<Int>>>()
/*
psi: val foo = getT<List<String, List<Int>>>()
type: [ERROR : List<String, List<Int>>]
*/
@@ -0,0 +1,37 @@
fun <T> getT(): T = null!!
val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
/*
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: List<Int?>
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: List<Int?>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int?
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: Int?
typeParameter: <out B> defined in kotlin.Pair
typeProjection: Pair<List<Int?>?, List<Int>?>
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: Pair<List<Int?>?, List<Int>?>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: List<Int?>?
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: List<Int?>?
typeParameter: <out E> defined in kotlin.List
typeProjection: Int?
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: Int?
typeParameter: <out B> defined in kotlin.Pair
typeProjection: List<Int>?
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: List<Int>?
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<Pair<List<Int?>, Pair<List<Int?>?, List<Int>?>>>()
type: Int
*/
@@ -0,0 +1,24 @@
trait Inv<T>
trait In<in I>
trait Out<out O>
fun <T> getT(): T = null!!
val foo = getT<Inv<out In<out Out<out Int>>>>()
/*
psi: val foo = getT<Inv<out In<out Out<out Int>>>>()
type: Inv<out In<out Out<out Int>>>
typeParameter: <T> defined in Inv
typeProjection: out In<out Out<out Int>>
psi: val foo = getT<Inv<out In<out Out<out Int>>>>()
type: In<out Out<out Int>>
typeParameter: <in I> defined in In
typeProjection: out Out<out Int>
psi: val foo = getT<Inv<out In<out Out<out Int>>>>()
type: Out<out Int>
typeParameter: <out O> defined in Out
typeProjection: out Int
psi: val foo = getT<Inv<out In<out Out<out Int>>>>()
type: Int
*/
@@ -0,0 +1,20 @@
fun <T> getT(): T = null!!
val foo = getT<Pair<List<Int>, String>>()
/*
psi: val foo = getT<Pair<List<Int>, String>>()
type: Pair<List<Int>, String>
typeParameter: <out A> defined in kotlin.Pair
typeProjection: List<Int>
psi: val foo = getT<Pair<List<Int>, String>>()
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<Pair<List<Int>, String>>()
type: Int
typeParameter: <out B> defined in kotlin.Pair
typeProjection: String
psi: val foo = getT<Pair<List<Int>, String>>()
type: String
*/
@@ -0,0 +1,11 @@
fun <T> getT(): T = null!!
val foo = getT<List<Int>>()
/*
psi: val foo = getT<List<Int>>()
type: List<Int>
typeParameter: <out E> defined in kotlin.List
typeProjection: Int
psi: val foo = getT<List<Int>>()
type: Int
*/
@@ -0,0 +1,11 @@
fun <T> getT(): T = null!!
val foo = getT<List<*>>()
/*
psi: val foo = getT<List<*>>()
type: List<Any?>
typeParameter: <out E> defined in kotlin.List
typeProjection: Any?
psi: val foo = getT<List<*>>()
type: Any?
*/
@@ -0,0 +1,17 @@
trait Inv<I>
fun <T> getT(): T = null!!
val foo = getT<Inv<out ((Inv<Int>)?)>>()
/*
psi: val foo = getT<Inv<out ((Inv<Int>)?)>>()
type: Inv<out Inv<Int>?>
typeParameter: <I> defined in Inv
typeProjection: out Inv<Int>?
psi: val foo = getT<Inv<out ((Inv<Int>)?)>>()
type: Inv<Int>?
typeParameter: <I> defined in Inv
typeProjection: Int
psi: val foo = getT<Inv<out ((Inv<Int>)?)>>()
type: Int
*/
@@ -0,0 +1,7 @@
fun <T> getT(): T = null!!
val foo = getT<List<adad<List<dd>>>()
/*
psi: val foo = getT<List<adad<List<dd>>>()
type: [ERROR : Type for getT<List<adad<List<dd>>>()]
*/