[FIR] Implement ASSIGNMENT_TYPE_MISMATCH, RESULT_TYPE_MISMATCH diagnostics, fix tests
This commit is contained in:
committed by
TeamCityServer
parent
aa70c952eb
commit
e57108d4e8
+12
-12
@@ -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<!>
|
||||
}
|
||||
|
||||
+1
-1
@@ -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()
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ class Outer<T> {
|
||||
z.checkType { _<Inner>() }
|
||||
z.checkType { _<Outer<T>.Inner>() }
|
||||
|
||||
inner = x
|
||||
inner = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
|
||||
}
|
||||
|
||||
class Nested
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Vendored
+2
-2
@@ -5,6 +5,6 @@ interface Tr<T> {
|
||||
}
|
||||
|
||||
fun test(t: Tr<*>) {
|
||||
t.v = t
|
||||
t.v = <!ASSIGNMENT_TYPE_MISMATCH!>t<!>
|
||||
t.v checkType { _<Tr<*>>() }
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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?>() }
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -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!!<!>
|
||||
}
|
||||
|
||||
Vendored
+17
-17
@@ -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<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
-1
@@ -1,6 +1,6 @@
|
||||
class Test {
|
||||
private var x = object {};
|
||||
init {
|
||||
x = object {}
|
||||
x = <!ASSIGNMENT_TYPE_MISMATCH!>object<!> {}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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()<!>
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
private var x = object {}
|
||||
|
||||
fun test() {
|
||||
x = object {}
|
||||
}
|
||||
x = <!ASSIGNMENT_TYPE_MISMATCH!>object<!> {}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -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) {}
|
||||
|
||||
Vendored
+1
-1
@@ -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) {}
|
||||
|
||||
Vendored
+2
-2
@@ -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<!>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user