[FIR] Introduce TYPE_ARGUMENTS_NOT_ALLOWED & some other type errors

This commit introduces several different things, in particular:
- check type arguments in expressions
- new TypeArgumentList node to deal with diagnostic source
- ConeDiagnostic was moved to fir:cones
- ConeIntermediateDiagnostic to use in inference (?) without reporting
- detailed diagnostics on error type
This commit is contained in:
Mikhail Glukhikh
2020-07-22 10:29:59 +03:00
parent c744dfba9c
commit 0804c6a0f3
196 changed files with 774 additions and 484 deletions
@@ -8,14 +8,14 @@ fun <T> consume(x: Foo<out T>, y: Foo<out T>) {}
fun <T> materialize() = null as T
fun test() {
consume(
materialize<<!UPPER_BOUND_VIOLATED!>Foo<Bar<ErrorType>><!>>(),
materialize<<!UPPER_BOUND_VIOLATED!>Foo<Bar<ErrorType>><!>>()
<!INAPPLICABLE_CANDIDATE!>consume<!>(
materialize<<!OTHER_ERROR, UPPER_BOUND_VIOLATED!>Foo<Bar<ErrorType>><!>>(),
materialize<<!OTHER_ERROR, UPPER_BOUND_VIOLATED!>Foo<Bar<ErrorType>><!>>()
)
<!INAPPLICABLE_CANDIDATE!>consume<!>(
materialize<<!UPPER_BOUND_VIOLATED!>Foo<Bar<ErrorType>><!>>(),
materialize<<!UPPER_BOUND_VIOLATED!>Foo<ErrorType><!>>()
materialize<<!OTHER_ERROR, UPPER_BOUND_VIOLATED!>Foo<Bar<ErrorType>><!>>(),
materialize<<!OTHER_ERROR, UPPER_BOUND_VIOLATED!>Foo<ErrorType><!>>()
)
}
@@ -19,7 +19,7 @@ public class Foo {
// FILE: test.kt
fun test(e: ErrorType) {
fun test(e: <!OTHER_ERROR, OTHER_ERROR!>ErrorType<!>) {
Foo.foo {
Sam.Result.<!INAPPLICABLE_CANDIDATE!>create<!>(e)
}
@@ -1 +1 @@
val <T : KClass<T>.something> abc
val <T : <!OTHER_ERROR!>KClass<T>.something<!>> abc
@@ -10,7 +10,7 @@ fun test1() {
}
}
fun bar(f: (A)->Unit) {}
fun bar(f: (<!OTHER_ERROR!>A<!>)->Unit) {}
fun test2() {
bar { a -> } // here we don't have 'cannot infer parameter type' error