[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:
+2
-2
@@ -1,6 +1,6 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
class A<T : Nested, F: Inner, G: Interface> {
|
||||
class A<T : <!OTHER_ERROR!>Nested<!>, F: <!OTHER_ERROR!>Inner<!>, G: <!OTHER_ERROR!>Interface<!>> {
|
||||
|
||||
class Nested
|
||||
|
||||
@@ -9,7 +9,7 @@ class A<T : Nested, F: Inner, G: Interface> {
|
||||
interface Interface
|
||||
}
|
||||
|
||||
class B<T, F, G> where T : Nested, F: Inner, G: Interface {
|
||||
class B<T, F, G> where T : <!OTHER_ERROR!>Nested<!>, F: <!OTHER_ERROR!>Inner<!>, G: <!OTHER_ERROR!>Interface<!> {
|
||||
|
||||
class Nested
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
interface I<F, G, H>
|
||||
|
||||
class A(impl: Interface) : Nested(), Interface by impl, Inner, I<Nested, Interface, Inner> {
|
||||
class A(impl: Interface) : <!OTHER_ERROR!>Nested<!>(), <!OTHER_ERROR!>Interface<!> by impl, <!OTHER_ERROR!>Inner<!>, <!OTHER_ERROR!>I<Nested, Interface, Inner><!> {
|
||||
|
||||
class Nested
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ interface I<F, G>
|
||||
val aImpl: A.Interface
|
||||
get() = null!!
|
||||
|
||||
object A : Nested(), Interface by aImpl, I<Nested, Interface> {
|
||||
object A : <!OTHER_ERROR!>Nested<!>(), <!OTHER_ERROR!>Interface<!> by aImpl, <!OTHER_ERROR!>I<Nested, Interface><!> {
|
||||
|
||||
class Nested
|
||||
|
||||
|
||||
+4
-4
@@ -9,19 +9,19 @@ interface B {
|
||||
}
|
||||
|
||||
class X: A {
|
||||
val a: A_ = <!UNRESOLVED_REFERENCE!>A_<!>()
|
||||
val a: <!OTHER_ERROR, OTHER_ERROR!>A_<!> = <!UNRESOLVED_REFERENCE!>A_<!>()
|
||||
val b: A.A_ = A.A_()
|
||||
|
||||
companion object {
|
||||
val a: A_ = <!UNRESOLVED_REFERENCE!>A_<!>()
|
||||
val a: <!OTHER_ERROR, OTHER_ERROR!>A_<!> = <!UNRESOLVED_REFERENCE!>A_<!>()
|
||||
}
|
||||
}
|
||||
|
||||
class Y: B {
|
||||
val a: B_ = <!UNRESOLVED_REFERENCE!>B_<!>()
|
||||
val a: <!OTHER_ERROR, OTHER_ERROR!>B_<!> = <!UNRESOLVED_REFERENCE!>B_<!>()
|
||||
val b: B.B_ = B.B_()
|
||||
|
||||
companion object {
|
||||
val b: B_ = <!UNRESOLVED_REFERENCE!>B_<!>()
|
||||
val b: <!OTHER_ERROR, OTHER_ERROR!>B_<!> = <!UNRESOLVED_REFERENCE!>B_<!>()
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -7,14 +7,14 @@ open class A {
|
||||
}
|
||||
|
||||
class C: A() {
|
||||
val b: B = null!!
|
||||
val b: <!OTHER_ERROR, OTHER_ERROR!>B<!> = null!!
|
||||
|
||||
init {
|
||||
<!UNRESOLVED_REFERENCE!>B<!>()
|
||||
}
|
||||
|
||||
object O {
|
||||
val b: B = null!!
|
||||
val b: <!OTHER_ERROR, OTHER_ERROR!>B<!> = null!!
|
||||
|
||||
init {
|
||||
<!UNRESOLVED_REFERENCE!>B<!>()
|
||||
@@ -22,7 +22,7 @@ class C: A() {
|
||||
}
|
||||
|
||||
class K {
|
||||
val b: B = null!!
|
||||
val b: <!OTHER_ERROR, OTHER_ERROR!>B<!> = null!!
|
||||
|
||||
init {
|
||||
<!UNRESOLVED_REFERENCE!>B<!>()
|
||||
@@ -30,7 +30,7 @@ class C: A() {
|
||||
}
|
||||
|
||||
inner class I {
|
||||
val b: B = null!!
|
||||
val b: <!OTHER_ERROR, OTHER_ERROR!>B<!> = null!!
|
||||
|
||||
init {
|
||||
<!UNRESOLVED_REFERENCE!>B<!>()
|
||||
|
||||
+4
-4
@@ -23,7 +23,7 @@ public class C extends B implements A {
|
||||
// FILE: 1.kt
|
||||
|
||||
class X: A {
|
||||
val a_s: A_S = null!!
|
||||
val a_s: <!OTHER_ERROR, OTHER_ERROR!>A_S<!> = null!!
|
||||
|
||||
init {
|
||||
<!UNRESOLVED_REFERENCE!>A_S<!>()
|
||||
@@ -32,7 +32,7 @@ class X: A {
|
||||
}
|
||||
|
||||
object xD {
|
||||
val a_: A_S = null!!
|
||||
val a_: <!OTHER_ERROR, OTHER_ERROR!>A_S<!> = null!!
|
||||
|
||||
init {
|
||||
<!UNRESOLVED_REFERENCE!>A_S<!>()
|
||||
@@ -66,7 +66,7 @@ class Y: B() {
|
||||
}
|
||||
|
||||
class Z: C() {
|
||||
val a_s: A_S = null!!
|
||||
val a_s: <!OTHER_ERROR, OTHER_ERROR!>A_S<!> = null!!
|
||||
val b_: B_ = null!!
|
||||
val b_s: B_S = null!!
|
||||
|
||||
@@ -77,7 +77,7 @@ class Z: C() {
|
||||
}
|
||||
|
||||
object X {
|
||||
val a_s: A_S = null!!
|
||||
val a_s: <!OTHER_ERROR, OTHER_ERROR!>A_S<!> = null!!
|
||||
val b_: B_ = null!!
|
||||
val b_s: B_S = null!!
|
||||
|
||||
|
||||
+3
-3
@@ -30,7 +30,7 @@ open class A<T> : J() {
|
||||
foo()
|
||||
bar()
|
||||
val a: Int = baz()
|
||||
val b: T = baz()
|
||||
val b: <!OTHER_ERROR!>T<!> = baz()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,14 +39,14 @@ open class A<T> : J() {
|
||||
foo()
|
||||
bar()
|
||||
val a: Int = baz()
|
||||
val b: T = baz()
|
||||
val b: <!OTHER_ERROR!>T<!> = baz()
|
||||
}
|
||||
|
||||
fun test() {
|
||||
foo()
|
||||
bar()
|
||||
val a: Int = baz()
|
||||
val b: T = baz()
|
||||
val b: <!OTHER_ERROR!>T<!> = baz()
|
||||
}
|
||||
|
||||
fun bar() {}
|
||||
|
||||
+3
-3
@@ -30,7 +30,7 @@ open class A<T> : J() {
|
||||
foo()
|
||||
bar()
|
||||
val a: Int = baz()
|
||||
val b: T = baz()
|
||||
val b: <!OTHER_ERROR!>T<!> = baz()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,14 +39,14 @@ open class A<T> : J() {
|
||||
foo()
|
||||
bar()
|
||||
val a: Int = baz()
|
||||
val b: T = baz()
|
||||
val b: <!OTHER_ERROR!>T<!> = baz()
|
||||
}
|
||||
|
||||
fun test() {
|
||||
foo()
|
||||
bar()
|
||||
val a: Int = baz()
|
||||
val b: T = baz()
|
||||
val b: <!OTHER_ERROR!>T<!> = baz()
|
||||
}
|
||||
|
||||
fun bar() {}
|
||||
|
||||
@@ -10,7 +10,7 @@ import d
|
||||
import d.Test
|
||||
import b.d
|
||||
|
||||
class Some: Test()
|
||||
class Some: <!OTHER_ERROR, OTHER_ERROR, OTHER_ERROR!>Test<!>()
|
||||
|
||||
//FILE:b.kt
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
package a
|
||||
|
||||
fun foo() {
|
||||
val b : B = <!UNRESOLVED_REFERENCE!>B<!>() //only B() is unresolved, but in ": B" and "B.foo()" B should also be unresolved
|
||||
val b : <!OTHER_ERROR!>B<!> = <!UNRESOLVED_REFERENCE!>B<!>() //only B() is unresolved, but in ": B" and "B.foo()" B should also be unresolved
|
||||
<!UNRESOLVED_REFERENCE!>B<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
|
||||
<!UNRESOLVED_REFERENCE!>P<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
|
||||
|
||||
Reference in New Issue
Block a user