KT-549 type inference failed

KT-580 Type inference failed
KT-600 Problem with 'sure' extension function type inference
KT-571 Type inference failed
This commit is contained in:
Andrey Breslav
2011-11-24 22:56:14 +03:00
parent 0ff639fd68
commit aba6b3d6b9
10 changed files with 167 additions and 36 deletions
@@ -0,0 +1,8 @@
//KT-600 Problem with 'sure' extension function type inference
fun <T : Any> T?.sure() : T { if (this != null) return this else throw NullPointerException() }
fun test() {
val i : Int? = 10
val <!UNUSED_VARIABLE!>i2<!> : Int = i.sure() // inferred type is Int? but Int was excepted
}
@@ -0,0 +1,16 @@
//KT-549 type inference failed
namespace demo
fun filter<T>(list : Array<T>, filter : fun (T) : Boolean) : java.util.List<T> {
val answer = java.util.ArrayList<T>();
for (l in list) {
if (filter(l)) answer.add(l)
}
return answer;
}
fun main(args : Array<String>) {
for (a in filter(args, {it.length > 1})) {
System.out?.println("Hello, ${a}!")
}
}
@@ -0,0 +1,20 @@
//KT-580 Type inference failed
namespace whats.the.difference
import java.util.*
fun iarray(vararg a : String) = a // BUG
fun main(vals : IntArray) {
val vals = iarray("789", "678", "567")
val diffs = ArrayList<Int>
for (i in vals.indices) {
for (j in i..vals.lastIndex()) // Type inference failed
diffs.add(vals[i].length - vals[j].length)
for (j in i..vals.lastIndex) // Type inference failed
diffs.add(vals[i].length - vals[j].length)
}
}
fun <T> Array<T>.lastIndex() = size - 1
val <T> Array<T>.lastIndex : Int get() = size - 1
@@ -0,0 +1,3 @@
//KT-571 Type inference failed
fun <T, R> let(t : T, body : fun(T) : R) = body(t)
private fun double(d : Int) : Int = let(d * 2) {it / 10 + it * 2 % 10}
@@ -19,7 +19,7 @@ fun t3() {
fun t4() {
val e: E? = E()
System.out?.println(e?.foo() == e) //verify error
System.out?.println(e?.bar() == e) //verify error
System.out?.println(e?.foo()) //verify error
}
@@ -35,4 +35,5 @@ class C(val x: Int)
class D(val s: String)
class E() {
fun foo() = 1
fun bar() = this
}