Switch kotlin version to 1.7

* Change 1.6 to 1.7 constants
* Fix SAFE_CALL_WILL_CHANGE_NULLABILITY for testData
* Change EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_WARNING to EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_ERROR
* Change NON_EXHAUSTIVE_WHEN_STATEMENT to NO_ELSE_IN_WHEN
* Fix testData for SafeCallsAreAlwaysNullable
* Change T -> T & Any in test dumps
* Change INVALID_CHARACTERS_NATIVE_WARNING -> INVALID_CHARACTERS_NATIVE_ERROR
* TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_WARNING -> TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_ERROR
This commit is contained in:
Mikhail Glukhikh
2021-12-23 17:55:36 +03:00
committed by Space
parent d741aaf82f
commit 53d6ac24e5
269 changed files with 624 additions and 1132 deletions
@@ -57,13 +57,13 @@ fun test() {
if (get() === null) {}
if (x != null) {
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>hashCode()<!>
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals(1)<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>hashCode()
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals(1)
x.equals("")
x.hashCode()
x.toString()
x.test()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>test2()<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>test2()
x.test2()
}
@@ -25,36 +25,36 @@ fun <R1 : R2, R2> build4(x: R2, @BuilderInference block: TestInterface<R1>.() ->
fun test(a: String?) {
val ret1 = build {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret2 = build2 {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret3 = build3 {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret4 = build4(1) {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
@@ -34,27 +34,27 @@ fun test(a: String?) {
}
val ret2 = build2 {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret3 = build3 {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
}
val ret4 = build4(1) {
emit(1)
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
get()<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
val x = get()
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")<!>
x<!UNNECESSARY_SAFE_CALL!>?.<!>equals("")
x <!USELESS_ELVIS!>?: 1<!>
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
""
@@ -60,3 +60,4 @@ public open class Foo3</*0*/ T : kotlin.Any!> {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -155,7 +155,7 @@ fun main() {
select(id(id(fun(x: String, y: String) { }), <!TOO_MANY_ARGUMENTS!>fun String.(x: String) {}<!>), { x, y -> x })
val x26: Int.(String) -> Int = <!TYPE_MISMATCH!>fun (x: String) = 10<!> // it must be error, see KT-38439
// Receiver must be specified in anonymous function declaration
val x27: Int.(String) -> Int = id(<!TYPE_MISMATCH!>fun <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>x: String<!>)<!> = 10<!>)
val x27: Int.(String) -> Int = id(<!TYPE_MISMATCH, TYPE_MISMATCH!>fun <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>(<!EXPECTED_PARAMETER_TYPE_MISMATCH!>x: String<!>)<!> = 10<!>)
select(id<Int.(String) -> Unit> {}, { x: Int, y: String -> x })
// Inferring lambda parameter types by partially specified parameter types of other lambdas
@@ -116,8 +116,8 @@ public final class Main</*0*/ L> {
public constructor Main</*0*/ L>(/*0*/ x: L?, /*1*/ y: L)
public final val vx01: Foo<Bar<L>>
public final val vx02: Foo<Bar<L>>
public final val vx11: OutBar<Bar<out OutBar<L>>>
public final val vx12: OutBar<Bar<out OutBar<L>>>
public final val vx11: OutBar<Bar<out OutBar<L & Any>>>
public final val vx12: OutBar<Bar<out OutBar<L & Any>>>
public final val vx21: OutBar<Bar<in OutBar<L>>>
public final val vx22: OutBar<Bar<in OutBar<L>>>
public final val x00: Bar<L>
@@ -128,12 +128,12 @@ public final class Main</*0*/ L> {
public final val x11: Foo<Bar<L>>
public final val x110: Bar<L>
public final val x111: Bar<L>
public final val x12: Foo<out Bar<out L>>
public final val x120: Bar<out L>
public final val x121: Bar<out L>
public final val x12: Foo<Bar<L & Any>>
public final val x120: Bar<L & Any>
public final val x121: Bar<L & Any>
public final val x122: Bar<L>
public final val x123: Bar<L>
public final val x13: Foo<out Bar<out L>>
public final val x13: Foo<Bar<L & Any>>
public final val x133: Bar<L?>
public final val x135: Bar<L>
public final val x137: Bar<L>
@@ -146,8 +146,8 @@ public final class Main</*0*/ L> {
public final val x154: Bar<L?>
public final val x161: Bar<L>
public final val x162: Bar<L>
public final val x163: Bar<out L>
public final val x164: Bar<out L>
public final val x163: Bar<L & Any>
public final val x164: Bar<L & Any>
public final val x170: Bar<L>
public final val x171: Bar<L>
public final val x180: [ERROR : <ERROR FUNCTION RETURN TYPE>]
@@ -164,24 +164,24 @@ public final class Main</*0*/ L> {
public final val x231: Foo<Foo<Bar<out L>>>
public final val x240: Foo<Foo<Bar<in L>>>
public final val x241: Foo<Foo<Bar<in L>>>
public final val x250: Bar<out L>
public final val x251: Bar<out L>
public final val x260: Foo<out Foo<out Bar<out L>>>
public final val x261: Foo<out Foo<out Bar<out L>>>
public final val x250: Bar<out L & Any>
public final val x251: Bar<out L & Any>
public final val x260: Foo<out Foo<out Bar<out L & Any>>>
public final val x261: Foo<out Foo<out Bar<out L & Any>>>
public final val x270: Foo<out Foo<Bar<out L>>>
public final val x271: Foo<out Foo<Bar<out L>>>
public final val x280: OutBar<OutBar<OutBar<L>>>
public final val x281: OutBar<OutBar<OutBar<L>>>
public final val x280: OutBar<OutBar<OutBar<L & Any>>>
public final val x281: OutBar<OutBar<OutBar<L & Any>>>
public final val x290: OutBar<Bar<OutBar<L>>>
public final val x291: OutBar<Bar<OutBar<L>>>
public final val x30: Foo<Bar<L>>
public final val x300: OutBar<Bar<out OutBar<L>>>
public final val x301: OutBar<Bar<out OutBar<L>>>
public final val x300: OutBar<Bar<out OutBar<L & Any>>>
public final val x301: OutBar<Bar<out OutBar<L & Any>>>
public final val x31: Foo<Bar<L>>
public final val x310: Bar<out L>
public final val x311: Bar<out L>
public final val x320: OutBar<L>
public final val x321: OutBar<L>
public final val x310: OutBarAliasUseSite<L & Any> /* = Bar<out L & Any> */
public final val x311: OutBarAliasUseSite<L & Any> /* = Bar<out L & Any> */
public final val x320: OutBarAliasDecSite<L & Any> /* = OutBar<L & Any> */
public final val x321: OutBarAliasDecSite<L & Any> /* = OutBar<L & Any> */
public final val x330: OutBar<InBar<OutBar<L>>>
public final val x331: OutBar<InBar<OutBar<L>>>
public final val x340: OutBar<Bar<in OutBar<L>>>
@@ -212,15 +212,15 @@ public final class Main</*0*/ L> {
public final val x451: OutBar<OutBar<Bar<L>>>
public final val x460: Bar<OutBar<OutBar<L>>>
public final val x461: Bar<OutBar<OutBar<L>>>
public final val x470: OutBar<OutBar<OutBar<L>>>
public final val x471: OutBar<OutBar<OutBar<L>>>
public final val x470: OutBar<OutBar<OutBar<L & Any>>>
public final val x471: OutBar<OutBar<OutBar<L & Any>>>
public final val x480: Bar<L>
public final val x481: Bar<L>
public final val x482: Bar<kotlin.Nothing>
public final val x50: Bar<in L>
public final val x51: Bar<in L>
public final val x60: OutBar<L>
public final val x61: OutBar<L>
public final val x60: OutBar<L & Any>
public final val x61: OutBar<L & Any>
public final val x70: InBar<L>
public final val x71: InBar<L>
public final val x80: Foo<Bar<L>>
@@ -54,5 +54,5 @@ fun test2(t: Test?) {
val xSafeCallSafeCastExplicitType = t?.findViewById<X>(0) <!USELESS_CAST!>as? X<!>
val xSafeCallCast = t?.findViewById(0) as X
val xSafeCallCastExplicitType = <!SAFE_CALL_WILL_CHANGE_NULLABILITY!>t<!UNNECESSARY_SAFE_CALL!>?.<!>findViewById<X>(0)<!> as X
val xSafeCallCastExplicitType = t<!UNNECESSARY_SAFE_CALL!>?.<!>findViewById<X>(0) as X
}
@@ -54,5 +54,5 @@ fun test2(t: Test?) {
val xSafeCallSafeCastExplicitType = t?.findViewById<X>(0) <!USELESS_CAST!>as? X<!>
val xSafeCallCast = t?.findViewById(0) as X
val xSafeCallCastExplicitType = <!SAFE_CALL_WILL_CHANGE_NULLABILITY!>t<!UNNECESSARY_SAFE_CALL!>?.<!>findViewById<X>(0)<!> as X
val xSafeCallCastExplicitType = t<!UNNECESSARY_SAFE_CALL!>?.<!>findViewById<X>(0) as X
}
+1 -1
View File
@@ -30,7 +30,7 @@ fun String.asFsdAddress(): String {
fun box(): String {
val state = Test().state
if (state is GoBuildingRunningState<*>) {
<!DEBUG_INFO_SMARTCAST, TYPE_MISMATCH_WARNING!>state<!>.buildingWorkingDirectory.asFsdAddress()
state.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>buildingWorkingDirectory<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>asFsdAddress<!>()
}
return "OK"
}
+2 -2
View File
@@ -29,7 +29,7 @@ fun test3() {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>baz<!> {
true
}
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>baz<!> { <!CANNOT_INFER_PARAMETER_TYPE!>x<!> ->
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>baz<!> { x ->
true
}
}
@@ -40,7 +40,7 @@ fun test4() {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>brr<!> {
true
}
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>brr<!> { <!CANNOT_INFER_PARAMETER_TYPE!>x<!> ->
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>brr<!> { x ->
true
}
}
@@ -0,0 +1,41 @@
package a
interface A {
val b: B
val nb: B?
}
interface B {
fun foo(): Int
}
fun test(u: A?, x: A?, y: A?, z: A?, w: A, v: A?) {
u?.b?.foo()!! // was UNNECESSARY_SAFE_CALL everywhere, because result type (of 'foo()') wasn't made nullable
u<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.b<!UNNECESSARY_SAFE_CALL!>?.<!>foo()!!
x?.b!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
// x?.b is not null
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
y?.nb?.foo()!!
y<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.nb?.foo()!!
z?.nb!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
// z?.nb is not null
z<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.nb!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
w.b<!UNNECESSARY_SAFE_CALL!>?.<!>foo()!!
w.b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
w.nb?.foo()!!
w.nb!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
v!!.b.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
}
fun B?.bar(): Int = 1
fun B?.baz(): Int? = 1
fun doInt(i: Int) = i
fun test(a: A?) {
doInt(a?.b.bar()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>)
doInt(a?.b.baz()!!)
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
package a
interface A {
@@ -12,7 +11,7 @@ interface B {
fun test(u: A?, x: A?, y: A?, z: A?, w: A, v: A?) {
u?.b?.foo()!! // was UNNECESSARY_SAFE_CALL everywhere, because result type (of 'foo()') wasn't made nullable
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>u<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.b<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!><!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
u<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.b<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
x?.b!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
// x?.b is not null
x<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
@@ -23,7 +22,7 @@ fun test(u: A?, x: A?, y: A?, z: A?, w: A, v: A?) {
// z?.nb is not null
z<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.nb!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>w.b<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!><!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
w.b<!UNNECESSARY_SAFE_CALL!>?.<!>foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
w.b<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
w.nb?.foo()!!
w.nb!!.foo()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
@@ -18,5 +18,5 @@ fun smartCastAfterIntersection(a: One, b: Two) = run {
}
fun test(one: One, two: Two) {
<!SAFE_CALL_WILL_CHANGE_NULLABILITY!>smartCastAfterIntersection(one, two)<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>base<!>()<!>
smartCastAfterIntersection(one, two)<!UNNECESSARY_SAFE_CALL!>?.<!><!UNRESOLVED_REFERENCE!>base<!>()
}
@@ -10,7 +10,7 @@ public class Throwables() {
public fun <X : Throwable?> propagateIfInstanceOf(throwable : Throwable?, declaredType : Class<X?>?) : Unit {
if (((throwable != null) && declaredType?.isInstance(throwable)!!))
{
throw <!SAFE_CALL_WILL_CHANGE_NULLABILITY!>declaredType<!UNNECESSARY_SAFE_CALL!>?.<!>cast(throwable)<!>!!
throw declaredType<!UNNECESSARY_SAFE_CALL!>?.<!>cast(throwable)!!
}
}
public fun propagateIfPossible(throwable : Throwable?) : Unit {
@@ -1,20 +0,0 @@
// SKIP_TXT
typealias A = CharSequence.(Int) -> Unit
var w: Int = 1
fun myPrint(x: Int) {}
fun <T> select(vararg x: T) = x[0]
val a1: A = select(
{ a: Int -> myPrint(a + this.length + 1) },
{ a: Int -> myPrint(a + this.length + 2) }
)
val a2 = select(
{ a: Int -> myPrint(a + this.length + 1) },
fun CharSequence.(a: Int) { myPrint(a + this.length + 2) },
{ a: Int -> myPrint(a + this.length + 3) }
)
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// SKIP_TXT
typealias A = CharSequence.(Int) -> Unit
@@ -9,12 +10,12 @@ fun myPrint(x: Int) {}
fun <T> select(vararg x: T) = x[0]
val a1: A = select(
{ <!EXPECTED_PARAMETER_TYPE_MISMATCH!>a: Int<!> -> myPrint(a + this.length + 1) },
{ a: Int -> myPrint(a + this.length + 1) },
{ a: Int -> myPrint(a + this.length + 2) }
)
val a2 = select(
{ a: Int -> myPrint(a + this.<!UNRESOLVED_REFERENCE!>length<!> <!DEBUG_INFO_MISSING_UNRESOLVED!>+<!> 1) },
{ a: Int -> myPrint(a + this.length + 1) },
fun CharSequence.(a: Int) { myPrint(a + this.length + 2) },
{ a: Int -> myPrint(a + this.<!UNRESOLVED_REFERENCE!>length<!> <!DEBUG_INFO_MISSING_UNRESOLVED!>+<!> 3) }
{ a: Int -> myPrint(a + this.length + 3) }
)