[FIR] Implement ASSIGNMENT_TYPE_MISMATCH, RESULT_TYPE_MISMATCH diagnostics, fix tests

This commit is contained in:
Ivan Kochurkin
2021-04-19 12:12:49 +03:00
committed by TeamCityServer
parent aa70c952eb
commit e57108d4e8
40 changed files with 200 additions and 131 deletions
+12 -12
View File
@@ -22,10 +22,10 @@ class WrongIncDec() {
fun testWrongIncDec() {
var x = WrongIncDec()
x++
++x
x--
--x
<!RESULT_TYPE_MISMATCH!>x++<!>
<!RESULT_TYPE_MISMATCH!>++x<!>
<!RESULT_TYPE_MISMATCH!>x--<!>
<!RESULT_TYPE_MISMATCH!>--x<!>
}
class UnitIncDec() {
@@ -35,12 +35,12 @@ class UnitIncDec() {
fun testUnitIncDec() {
var x = UnitIncDec()
x++
++x
x--
--x
x = x++
x = x--
x = ++x
x = --x
<!RESULT_TYPE_MISMATCH!>x++<!>
<!RESULT_TYPE_MISMATCH!>++x<!>
<!RESULT_TYPE_MISMATCH!>x--<!>
<!RESULT_TYPE_MISMATCH!>--x<!>
x = <!RESULT_TYPE_MISMATCH!>x++<!>
x = <!RESULT_TYPE_MISMATCH!>x--<!>
x = <!RESULT_TYPE_MISMATCH!>++x<!>
x = <!RESULT_TYPE_MISMATCH!>--x<!>
}
@@ -13,7 +13,7 @@ class Q {
private var y = foo<String>()
fun bar() {
x = y
x = <!ASSIGNMENT_TYPE_MISMATCH!>y<!>
x = foo<CharSequence>()
y = foo<String>()
@@ -29,7 +29,7 @@ fun <E> commonSupertype(x: E, y: E): E = x
fun foo() {
var myIt = A<String>().iterator()
myIt = A<Int>().iterator()
myIt = <!ASSIGNMENT_TYPE_MISMATCH!>A<Int>().iterator()<!>
val csIt: Iterator<CharSequence> = A<String>().iterator()
@@ -11,7 +11,7 @@ class Outer<T> {
z.checkType { _<Inner>() }
z.checkType { _<Outer<T>.Inner>() }
inner = x
inner = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
}
class Nested
@@ -12,7 +12,7 @@ fun <T : CharSequence?> foo(x: T) {
if (x != null) {}
y1 = x
y2 = x
y2 = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
bar1(x)
bar1<CharSequence>(x)
@@ -31,7 +31,7 @@ fun <T : CharSequence?> foo(x: T) {
if (x is CharSequence) {
y1 = x
y2 = x
y2 = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
bar1(x)
bar2(x)
@@ -24,10 +24,10 @@ class A<T : CharSequence?, E1 : T, E2: T?> {
}
if (1 == 1) {
t = tN
t = <!ASSIGNMENT_TYPE_MISMATCH!>tN<!>
}
t = y
t = <!ASSIGNMENT_TYPE_MISMATCH!>y<!>
if (y != null) {
t = y
@@ -5,6 +5,6 @@ interface Tr<T> {
}
fun test(t: Tr<*>) {
t.v = t
t.v = <!ASSIGNMENT_TYPE_MISMATCH!>t<!>
t.v checkType { _<Tr<*>>() }
}
}
@@ -8,7 +8,7 @@ interface Tr<T> {
fun test(t: Tr<*>) {
t.v = null!!
t.v = ""
t.v = <!ASSIGNMENT_TYPE_MISMATCH!>""<!>
t.v = <!NULL_FOR_NONNULL_TYPE!>null<!>
t.v checkType { _<Any?>() }
}
}
@@ -7,5 +7,5 @@ interface Tr<T> {
fun test(t: Tr<out String>) {
// resolved as t.v = t.v + null!!, where type of right operand is String,
// so TYPE_MISMATCH: String is not <: of Captured(out String)
t.v += null!!
}
<!ASSIGNMENT_TYPE_MISMATCH!>t.v += null!!<!>
}
@@ -3,15 +3,15 @@ fun intBinEq() {
x <!UNRESOLVED_REFERENCE!>+=<!> 'a'
x += 1.toByte()
x += 1.toShort()
x += 1L
x += 1f
x += 1.0
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1.0<!>
x <!UNRESOLVED_REFERENCE!>*=<!> 'a'
x *= 1.toByte()
x *= 1.toShort()
x *= 1L
x *= 1f
x *= 1.0
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toByte()<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toShort()<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.0<!>
}
fun shortBinEq() {
@@ -19,16 +19,16 @@ fun shortBinEq() {
x <!UNRESOLVED_REFERENCE!>+=<!> 'a'
x += 1.toByte()
x += 1.toShort()
x += 1L
x += 1f
x += 1.0
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x += 1.0<!>
x <!UNRESOLVED_REFERENCE!>*=<!> 'a'
x *= 1.toByte()
x *= 1.toShort()
x *= 1L
x *= 1f
x *= 1.0
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toByte()<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.toShort()<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1L<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1f<!>
<!ASSIGNMENT_TYPE_MISMATCH!>x *= 1.0<!>
}
class A {
@@ -44,5 +44,5 @@ fun overloading() {
var y = A()
x += y
var z = B()
z += x
<!ASSIGNMENT_TYPE_MISMATCH!>z += x<!>
}
@@ -18,10 +18,10 @@ var n: J? = J()
fun test() {
v = J.staticNN
v = J.staticN
v = <!ASSIGNMENT_TYPE_MISMATCH!>J.staticN<!>
v = J.staticJ
n = J.staticNN
n = J.staticN
n = J.staticJ
}
}
@@ -34,8 +34,8 @@ fun foo(c: C) {
c.z checkType { _<String>() }
c.y = ""
c.y = 1
c.y = <!ASSIGNMENT_TYPE_MISMATCH!>1<!>
c.z = ""
c.z = 1
c.z = <!ASSIGNMENT_TYPE_MISMATCH!>1<!>
}
@@ -14,8 +14,8 @@ fun foo() {
noSetter checkType { _<Int>() }
x = 1
x = ""
x = <!ASSIGNMENT_TYPE_MISMATCH!>""<!>
noSetter = 2
noSetter = ""
noSetter = <!ASSIGNMENT_TYPE_MISMATCH!>""<!>
}
@@ -15,7 +15,7 @@ fun a(c: Calendar) {
A().apply {
c.apply {
timeInMillis = 5 // synthesized variable for get|setTimeInMillis
timeInMillis = ""
timeInMillis = <!ASSIGNMENT_TYPE_MISMATCH!>""<!>
}
timeInMillis = ""
}
@@ -4,7 +4,7 @@ class IncDec {
fun foo(): IncDec {
var x = IncDec()
x = x++
x++
x = <!RESULT_TYPE_MISMATCH!>x++<!>
<!RESULT_TYPE_MISMATCH!>x++<!>
return x
}
@@ -1,5 +1,5 @@
// !DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE
fun test() {
var x = object {}
x = object {}
x = <!ASSIGNMENT_TYPE_MISMATCH!>object<!> {}
}
@@ -15,5 +15,5 @@ private fun foo() = run {
fun test() {
var x = foo(1)
x = foo()
}
x = <!ASSIGNMENT_TYPE_MISMATCH!>foo()<!>
}
@@ -1,6 +1,6 @@
class Test {
private var x = object {};
init {
x = object {}
x = <!ASSIGNMENT_TYPE_MISMATCH!>object<!> {}
}
}
@@ -19,5 +19,5 @@ private fun foo() = run {
fun test() {
var x = foo(1)
x = foo()
}
x = <!ASSIGNMENT_TYPE_MISMATCH!>foo()<!>
}
@@ -19,5 +19,5 @@ private fun foo() = run {
fun test() {
var x = foo(1)
x = foo()
}
x = <!ASSIGNMENT_TYPE_MISMATCH!>foo()<!>
}
@@ -1,5 +1,5 @@
private var x = object {}
fun test() {
x = object {}
}
x = <!ASSIGNMENT_TYPE_MISMATCH!>object<!> {}
}
@@ -29,7 +29,7 @@ fun foo(k: KotlinClass) {
useString(k.getSomething5())
useString(k.something5)
k.setSomething5(1)
k.something5 = 1
k.something5 = <!ASSIGNMENT_TYPE_MISMATCH!>1<!>
}
fun useInt(i: Int) {}
@@ -9,7 +9,7 @@ fun foo(k: KotlinClass) {
if (k.something == null) return
k.setSomething(1)
k.something = 1
k.something = <!ASSIGNMENT_TYPE_MISMATCH!>1<!>
}
fun useString(i: String) {}
@@ -4,7 +4,7 @@ fun foo(o: JavaClass2) {
useString(o.something)
o.something = ""
o.setSomething(1)
o.something = 1 // we generate extension property for JavaClass2 with more specific type
o.something = <!ASSIGNMENT_TYPE_MISMATCH!>1<!> // we generate extension property for JavaClass2 with more specific type
o.something += "1"
}
@@ -19,4 +19,4 @@ public class JavaClass1 {
// FILE: JavaClass2.java
public class JavaClass2 extends JavaClass1 {
public String getSomething() { return ""; }
}
}
@@ -1,6 +1,6 @@
class My {
var x: String = ""
set(vararg value) {
x = value
x = <!ASSIGNMENT_TYPE_MISMATCH!>value<!>
}
}
}