improved reporting TYPE_MISMATCH error for function literals

(introduced EXPECTED_PARAMETER_TYPE_MISMATCH, EXPECTED_RETURN_TYPE_MISMATCH, EXPECTED_PARAMETERS_NUMBER_MISMATCH
instead of reporting TYPE_MISMATCH on the whole function literal)
This commit is contained in:
Svetlana Isakova
2012-12-20 18:50:32 +04:00
parent 972b234db6
commit c37d7352a5
11 changed files with 172 additions and 41 deletions
@@ -0,0 +1,19 @@
package a
trait Super
trait Trait : Super
class Sub : Trait
fun foo(f: (Trait) -> Trait) = f
fun test(s: Sub) {
foo {
(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>t: Super<!>): <!EXPECTED_RETURN_TYPE_MISMATCH!>Sub<!> -> s
}
foo {
(t: Trait): Trait -> s
}
foo {
(t: Sub): Super -> s
}
}
@@ -0,0 +1,47 @@
package a
fun foo0(f: () -> String) = f
fun foo1(f: (Int) -> String) = f
fun foo2(f: (Int, String) -> String) = f
fun test1() {
foo0 {
""
}
foo0 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(s: String)<!> -> ""
}
foo0 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!><!CANNOT_INFER_PARAMETER_TYPE!>x<!>, <!CANNOT_INFER_PARAMETER_TYPE!>y<!><!> -> ""
}
foo0 {
(): <!EXPECTED_RETURN_TYPE_MISMATCH!>Int<!> -> 42
}
foo1 {
""
}
foo1 {
(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>s: String<!>) -> ""
}
foo1 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>x, <!CANNOT_INFER_PARAMETER_TYPE!>y<!><!> -> ""
}
foo1 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>()<!>: <!EXPECTED_RETURN_TYPE_MISMATCH!>Int<!> -> 42
}
foo2 <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>{<!>
""
}
foo2 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>s: String<!>)<!> -> ""
}
foo2 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>x<!> -> ""
}
foo2 {
<!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>()<!>: <!EXPECTED_RETURN_TYPE_MISMATCH!>Int<!> -> 42
}
}