Add quick-fix "add .getOrThrow()" for SuccessOrFailure inspection

#KT-25621 Fixed
This commit is contained in:
Mikhail Glukhikh
2018-08-22 18:52:21 +03:00
parent 87d750aa1c
commit 2084e94099
19 changed files with 347 additions and 1 deletions
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.inspections.coroutines.ResultIsSuccessOrFailureInspection
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test() {
val x = <caret>fun() = SuccessOrFailure("123")
}
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test() {
val x = fun() = SuccessOrFailure("123").getOrThrow()
}
@@ -0,0 +1,40 @@
// WITH_RUNTIME
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun <caret>incorrectBlock(arg: Boolean, arg2: Boolean?): SuccessOrFailure<Int> {
if (arg) {
class Local {
fun foo(): SuccessOrFailure<String> {
return SuccessOrFailure("NO")
}
}
return SuccessOrFailure(1)
} else {
when (arg2) {
true -> {
val x = fun(): SuccessOrFailure<Boolean> {
return SuccessOrFailure(false)
}
if (x().getOrThrow()) {
return SuccessOrFailure(2)
} else {
return SuccessOrFailure(0)
}
}
else -> {
if (arg2 == false) {
listOf(1, 2, 3).forEach {
if (it == 2) return@forEach
}
return SuccessOrFailure(3)
}
return SuccessOrFailure(4)
}
}
}
}
@@ -0,0 +1,40 @@
// WITH_RUNTIME
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun incorrectBlock(arg: Boolean, arg2: Boolean?): Int {
if (arg) {
class Local {
fun foo(): SuccessOrFailure<String> {
return SuccessOrFailure("NO")
}
}
return SuccessOrFailure(1).getOrThrow()
} else {
when (arg2) {
true -> {
val x = fun(): SuccessOrFailure<Boolean> {
return SuccessOrFailure(false)
}
if (x().getOrThrow()) {
return SuccessOrFailure(2).getOrThrow()
} else {
return SuccessOrFailure(0).getOrThrow()
}
}
else -> {
if (arg2 == false) {
listOf(1, 2, 3).forEach {
if (it == 2) return@forEach
}
return SuccessOrFailure(3).getOrThrow()
}
return SuccessOrFailure(4).getOrThrow()
}
}
}
}
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test() {
val x = <caret>{ SuccessOrFailure(true) }
}
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test() {
val x = { SuccessOrFailure(true).getOrThrow() }
}
@@ -0,0 +1,15 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test(arg: Boolean) {
val x = foo@<caret>{
if (!arg) {
return@foo SuccessOrFailure(true)
} else {
SuccessOrFailure(false)
}
}
}
@@ -0,0 +1,15 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test(arg: Boolean) {
val x = foo@{
(if (!arg) {
return@foo SuccessOrFailure(true).getOrThrow()
} else {
SuccessOrFailure(false)
}).getOrThrow()
}
}
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test() {
val x = foo@<caret>{ return@foo SuccessOrFailure(true) }
}
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun test() {
val x = foo@<caret>{ return@foo SuccessOrFailure(true).getOrThrow() }
}
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
operator fun plus(other: SuccessOrFailure<T>) = other
}
fun <caret>incorrect() = SuccessOrFailure("123") + SuccessOrFailure("456")
@@ -0,0 +1,9 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
operator fun plus(other: SuccessOrFailure<T>) = other
}
fun incorrect() = (SuccessOrFailure("123") + SuccessOrFailure("456")).getOrThrow()
@@ -0,0 +1,7 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun <caret>incorrect() = SuccessOrFailure("123")
@@ -0,0 +1,7 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun incorrect() = SuccessOrFailure("123").getOrThrow()
@@ -0,0 +1,21 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun <caret>incorrectBlock(arg: Boolean, arg2: Boolean?): SuccessOrFailure<Int> {
if (arg) {
return SuccessOrFailure(1)
} else {
when (arg2) {
true -> return SuccessOrFailure(2)
else -> {
if (arg2 == false) {
return SuccessOrFailure(3)
}
return SuccessOrFailure(4)
}
}
}
}
@@ -0,0 +1,21 @@
package kotlin
class SuccessOrFailure<T>(val value: T?) {
fun getOrThrow(): T = value ?: throw AssertionError("")
}
fun incorrectBlock(arg: Boolean, arg2: Boolean?): Int {
if (arg) {
return SuccessOrFailure(1).getOrThrow()
} else {
when (arg2) {
true -> return SuccessOrFailure(2).getOrThrow()
else -> {
if (arg2 == false) {
return SuccessOrFailure(3).getOrThrow()
}
return SuccessOrFailure(4).getOrThrow()
}
}
}
}