Convert ConvertTwoComparisonsToRangeCheck intention to inspection

Relates to #KT-17310
This commit is contained in:
Dmitry Gridin
2019-10-25 20:11:27 +07:00
parent 8e4c7ad65d
commit 81f3a98f49
65 changed files with 190 additions and 218 deletions
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.inspections.ConvertTwoComparisonsToRangeCheckInspection
@@ -0,0 +1,3 @@
fun foo(bar: Char) {
bar >= 'a' && 'z' >= bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Char) {
bar in 'a'..'z'
}
@@ -0,0 +1,3 @@
fun foo(bar: Char) {
bar > 'a' && 'z' > bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Char) {
bar in 'b'..'y'
}
@@ -0,0 +1,5 @@
// PROBLEM: none
// DISABLE-ERRORS
fun foo(bar: Char) {
bar > 1 && 2 > bar<caret>
}
@@ -0,0 +1,10 @@
// WITH_RUNTIME
class A(val _value: Int): Comparable<A> {
override operator fun compareTo(other: A) = _value.compareTo(other._value)
}
val low = A(0)
val high = A(100)
fun test(a: A): Boolean {
return low <= a && a <= high<caret>
}
@@ -0,0 +1,10 @@
// WITH_RUNTIME
class A(val _value: Int): Comparable<A> {
override operator fun compareTo(other: A) = _value.compareTo(other._value)
}
val low = A(0)
val high = A(100)
fun test(a: A): Boolean {
return a in low..high
}
@@ -0,0 +1,9 @@
// PROBLEM: none
// WITH_RUNTIME
class A(val _value: Int) {
operator fun compareTo(other: Int) = _value.compareTo(other)
}
fun test(a: A): Boolean {
return a >= 0 && a <= 100<caret>
}
@@ -0,0 +1,11 @@
// PROBLEM: none
// WITH_RUNTIME
class A(val _value: Int) {
operator fun compareTo(other: A) = _value.compareTo(other._value)
}
val low = A(0)
val high = A(100)
fun test(a: A): Boolean {
return low <= a && a <= high<caret>
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Int) {
bar >= 0.0 && 10.0 >= bar<caret>
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Int) {
bar in 0.0..10.0
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Double) {
0 <= bar && bar <= 10.0<caret>
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Double) {
bar in 0.0..10.0
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Double) {
0 <= bar && bar <= 10<caret>
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Double) {
bar in 0.0..10.0
}
@@ -0,0 +1 @@
fun foo(arg: Int) = 6 > arg && arg >= 1<caret>
@@ -0,0 +1 @@
fun foo(arg: Int) = arg in 1..5
@@ -0,0 +1,6 @@
// PROBLEM: none
var x = 42
// Should be converted into arg in --x..++x (41..42) but initial check is arg <= ++x (43) && --x (42) <= arg
fun foo(arg: Int) = <caret>arg <= ++x && --x <= arg
@@ -0,0 +1,5 @@
// PROBLEM: none
// WITH_RUNTIME
fun foo(bar: Int) {
bar > 0.0 && 10.0 >= bar<caret>
}
@@ -0,0 +1,5 @@
// PROBLEM: none
// WITH_RUNTIME
fun foo(bar: Double) {
bar > 0 && 10 >= bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar >= 0 && 10 > bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar >= 0 && 10 >= bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar >= 0 && bar < 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar >= 0 && bar <= 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar > 0 && 10 > bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar > 0 && 10 >= bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar > 0 && bar < 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar > 0 && bar <= 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 <= bar && 10 > bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 <= bar && 10 >= bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 <= bar && bar < 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 <= bar && bar <= 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 0..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 < bar && 10 > bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 < bar && 10 >= bar<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..10
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 < bar && bar < 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..9
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
0 < bar && bar <= 10<caret>
}
@@ -0,0 +1,3 @@
fun foo(bar: Int) {
bar in 1..10
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Int, min: Int, max: Int) {
min < bar && bar < max<caret>
}
@@ -0,0 +1,4 @@
// WITH_RUNTIME
fun foo(bar: Int, min: Int, max: Int) {
bar in (min + 1) until max
}
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val N = 42
fun test(a: Int) = a >= 0 && a < N<caret>
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val N = 42
fun test(a: Int) = a in 0 until N