avoid indeterminate tests, where two same-named quick fixes "Add !!" were applied to a and a[0] at random

GitOrigin-RevId: 5eb1b634799c201c4abeab912fe0bad1865f0b9d
This commit is contained in:
Alexey Kudravtsev
2024-04-15 11:52:39 +00:00
committed by intellij-monorepo-bot
parent fa429131ac
commit bd166cf070
158 changed files with 172 additions and 173 deletions
@@ -12,7 +12,7 @@ group.names.redundant.constructs=Redundant constructs
group.names.style.issues=Style issues
group.names.code.migration=Code migration
fix.insert.delegation.call=Insert ''{0}()'' call
fix.introduce.non.null.assertion=Add non-null asserted (!!) call
fix.introduce.non.null.assertion=Add non-null asserted ({0}!!) call
fix.remove.non.null.assertion=Remove unnecessary non-null assertion (!!)
fix.add.annotation.target=Add annotation target
progress.looking.up.add.annotation.usage=Looking up annotation usage\u2026
@@ -13,7 +13,10 @@ import org.jetbrains.kotlin.psi.*
class AddExclExclCallFix(psiElement: PsiElement, private val fixImplicitReceiver: Boolean = false) : ExclExclCallFix(psiElement),
LowPriorityAction {
override fun getText() = KotlinBundle.message("fix.introduce.non.null.assertion")
override fun getText(): String {
val name = element?.text ?: ""
return KotlinBundle.message("fix.introduce.non.null.assertion", name)
}
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
val modifiedExpression = element ?: return
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
fun foo(a: Array<String>?): String {
return <caret>a[0]
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
fun foo(a: Array<String>?): String {
return a!![0]
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a[0]!!) call" "true"
fun foo(a: Array<String?>): String {
return <caret>a[0]
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a[0]!!) call" "true"
fun foo(a: Array<String?>): String {
return a[0]!!
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a[0]!!) call" "true"
fun foo(a: Array<String?>) {
a[0]<caret>.length
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a[0]!!) call" "true"
fun foo(a: Array<String?>) {
a[0]!!.length
@@ -1,7 +1,5 @@
// "Add non-null asserted (!!) call" "true"
// SHOULD_BE_AVAILABLE_AFTER_EXECUTION
// ERROR: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Array<String?>?
// "Add non-null asserted (a!!) call" "true"
// ERROR: Type mismatch: inferred type is String? but String was expected
fun foo(a: Array<String?>?): String {
return <caret>a[0]
}
@@ -1,9 +1,7 @@
// "Add non-null asserted (!!) call" "true"
// SHOULD_BE_AVAILABLE_AFTER_EXECUTION
// ERROR: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Array<String?>?
// "Add non-null asserted (a!!) call" "true"
// ERROR: Type mismatch: inferred type is String? but String was expected
fun foo(a: Array<String?>?): String {
return a[0]!!
return a!![0]
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddExclExclCallFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddExclExclCallFix
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
// WITH_STDLIB
var i = 0
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
// WITH_STDLIB
var i = 0
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
class A(var s: String)
fun foo(a: A?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
class A(var s: String)
fun foo(a: A?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (foo!!) call" "true"
class Foo {
fun f() = 1
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (foo!!) call" "true"
class Foo {
fun f() = 1
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (foo?.bar!!) call" "true"
class Foo {
val bar = Bar()
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (foo?.bar!!) call" "true"
class Foo {
val bar = Bar()
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (::f!!) call" "true"
class Foo {
fun f() = 1
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (::f!!) call" "true"
class Foo {
fun f() = 1
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (length!!) call" "true"
fun String?.foo() {
<caret>length
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (length!!) call" "true"
fun String?.foo() {
this!!.length
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (length!!) call" "true"
// WITH_STDLIB
fun test(s: String?) {
s.run {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (length!!) call" "true"
// WITH_STDLIB
fun test(s: String?) {
s.run {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (project!!) call" "true"
class Foo {
val project: Project? = null
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (project!!) call" "true"
class Foo {
val project: Project? = null
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (toLowerCase()!!) call" "true"
// WITH_STDLIB
fun String?.foo() {
<caret>toLowerCase()
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (toLowerCase()!!) call" "true"
// WITH_STDLIB
fun String?.foo() {
this!!.toLowerCase()
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (p!!) call" "true"
class SafeType {
infix fun op(arg: Int) {}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (p!!) call" "true"
class SafeType {
infix fun op(arg: Int) {}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (test!!) call" "true"
fun foo() {
val test : Collection<Int>? = null!!
for (i in <caret>test) { }
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (test!!) call" "true"
fun foo() {
val test : Collection<Int>? = null!!
for (i in <caret>test!!) { }
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (test!!) call" "true"
class Some {
operator fun iterator(): Iterator<Int> = null!!
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (test!!) call" "true"
class Some {
operator fun iterator(): Iterator<Int> = null!!
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (c!!) call" "true"
fun <T: Collection<Int>?> foo(c: T) {
for (i in <caret>c) { }
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (c!!) call" "true"
fun <T: Collection<Int>?> foo(c: T) {
for (i in c!!) { }
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (list!!) call" "true"
// WITH_STDLIB
class C {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (list!!) call" "true"
// WITH_STDLIB
class C {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (test!!) call" "true"
class Some {
fun iterator(): Iterator<Int> = null!!
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (test!!) call" "true"
class Some {
fun iterator(): Iterator<Int> = null!!
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (test!!) call" "false"
// ACTION: Surround with null check
// ERROR: Not nullable value required to call an 'iterator()' method on for-loop range
@@ -1,5 +1,5 @@
// FILE: test.before.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (this!!) call" "true"
// WITH_STDLIB
package p;
@@ -39,7 +39,7 @@ public class Foo {
}
// FILE: test.after.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (this!!) call" "true"
// WITH_STDLIB
package p;
@@ -1,5 +1,5 @@
// FILE: test.before.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (x.foo()!!) call" "true"
package p;
fun test(x: Foo) {
@@ -29,7 +29,7 @@ public class Foo {
}
// FILE: test.after.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (x.foo()!!) call" "true"
package p;
fun test(x: Foo) {
@@ -1,5 +1,5 @@
// FILE: test.before.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (y!!) call" "true"
package p;
fun test(x: Foo) {
@@ -37,7 +37,7 @@ public class Foo {
}
// FILE: test.after.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (y!!) call" "true"
package p;
fun test(x: Foo) {
@@ -1,5 +1,5 @@
// FILE: test.before.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (y!!) call" "true"
package p;
fun test(x: Foo) {
@@ -37,7 +37,7 @@ public class Foo {
}
// FILE: test.after.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (y!!) call" "true"
package p;
fun test(x: Foo) {
@@ -1,5 +1,5 @@
// FILE: test.before.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (x.value!!) call" "true"
package p;
fun test(x: Foo) {
@@ -41,7 +41,7 @@ public class Foo {
}
// FILE: test.after.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (x.value!!) call" "true"
package p;
fun test(x: Foo) {
@@ -1,5 +1,5 @@
// FILE: test.before.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (bar()!!) call" "true"
// WITH_STDLIB
package p;
@@ -39,7 +39,7 @@ public class Foo {
}
// FILE: test.after.kt
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (bar()!!) call" "true"
// WITH_STDLIB
package p;
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
fun foo(a: String?) {
a<caret>.length
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
fun foo(a: String?) {
a!!.length
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
// WITH_STDLIB
fun foo(a: String?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
// WITH_STDLIB
fun foo(a: String?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (null!!) call" "false"
// ACTION: Convert to lazy property
// ACTION: Add 'toString()' call
// ACTION: Change type of 'x' to 'String?'
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (arg!!) call" "false"
// ACTION: Add 'toString()' call
// ACTION: Change type of 'x' to 'String?'
// ERROR: Type mismatch: inferred type is String? but String was expected
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
open class MyClass {
open val s: String? = null
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
open class MyClass {
open val s: String? = null
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (arg!!) call" "false"
fun foo(arg: String?) {
if (arg == null) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (arg!!) call" "true"
// DISABLE-ERRORS
fun foo(arg: String?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (arg!!) call" "true"
// DISABLE-ERRORS
fun foo(arg: String?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
interface Foo {
fun bar()
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
interface Foo {
fun bar()
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (p!!) call" "true"
class SafeType {
operator fun plus(arg: Int) {}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (p!!) call" "true"
class SafeType {
operator fun plus(arg: Int) {}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i--<caret>
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! - 1
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i /=<caret> 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! / 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
// WITH_STDLIB
fun foo(a: List<String>?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a!!) call" "true"
// WITH_STDLIB
fun foo(a: List<String>?) {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i++<caret>
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! + 1
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i -=<caret> 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! - 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i +=<caret> 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! + 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (map[3]!!) call" "true"
// WITH_STDLIB
fun test(map: MutableMap<Int, Int>) {
map[3] +=<caret> 5
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (map[3]!!) call" "true"
// WITH_STDLIB
fun test(map: MutableMap<Int, Int>) {
map[3] = map[3]!! + 5
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i %=<caret> 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! % 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i *=<caret> 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (i!!) call" "true"
fun test() {
var i: Int? = 0
i = i!! * 2
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (p!!) call" "true"
class SafeType {
operator fun unaryMinus() {}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (p!!) call" "true"
class SafeType {
operator fun unaryMinus() {}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (i!!) call" "false"
// ACTION: Add 'i =' to argument
// ACTION: Change parameter 'i' type of function 'other' to 'Int?'
// ACTION: Create function 'other'
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
fun test(s: String?) {
var z: String = ""
z = <caret>s
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
fun test(s: String?) {
var z: String = ""
z = s!!
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
fun test(s: String?) {
val z: String = <caret>s
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
fun test(s: String?) {
val z: String = s!!
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
class C {
val s: String? = null
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
class C {
val s: String? = null
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
class C {
val s: String? = null
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
class C {
val s: String? = null
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
class C {
val s: String? = null
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
class C {
val s: String? = null
}
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (null!!) call" "false"
// ACTION: Add 'i =' to argument
// ACTION: Change parameter 'i' type of function 'other' to 'Int?'
// ACTION: Do not show hints for current method
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a.foo().single()!!) call" "true"
// WITH_STDLIB
class A {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (a.foo().single()!!) call" "true"
// WITH_STDLIB
class A {
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
fun test() {
val s: String? = null
other(<caret>s)
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (s!!) call" "true"
fun test() {
val s: String? = null
other(<caret>s!!)
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "false"
// "Add non-null asserted (s!!) call" "false"
// ACTION: Change parameter 's' type of function 'other' to 'String?'
// ACTION: Create function 'other'
// ACTION: Convert to also
@@ -1,4 +1,4 @@
// "Add non-null asserted (!!) call" "true"
// "Add non-null asserted (t!!) call" "true"
interface Some
fun <T: Some?> test(t: T) {

Some files were not shown because too many files have changed in this diff Show More