diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/AbstractRangeInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/AbstractRangeInspection.kt index 97e9c13f0bf4..312e119eea65 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/AbstractRangeInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/AbstractRangeInspection.kt @@ -33,15 +33,14 @@ abstract class AbstractRangeInspection : AbstractKotlinInspection() { val context = lazy { expression.analyze(BodyResolveMode.PARTIAL) } when (expression.getRangeBinaryExpressionType(context) ?: return) { RangeKtExpressionType.rangeTo -> visitRangeTo(expression, context.value, holder) - RangeKtExpressionType.rangeUntil -> Unit + RangeKtExpressionType.until, RangeKtExpressionType.rangeUntil -> visitUntilOrRangeUntil(expression, context.value, holder) RangeKtExpressionType.downTo -> visitDownTo(expression, context.value, holder) - RangeKtExpressionType.until -> visitUntil(expression, context.value, holder) } } abstract fun visitRangeTo(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) - abstract fun visitUntil(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) + abstract fun visitUntilOrRangeUntil(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) abstract fun visitDownTo(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/EmptyRangeInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/EmptyRangeInspection.kt index c905c366329d..a87b65abb73a 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/EmptyRangeInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/EmptyRangeInspection.kt @@ -30,7 +30,7 @@ class EmptyRangeInspection : AbstractRangeInspection() { } } - override fun visitUntil(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) { + override fun visitUntilOrRangeUntil(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) { expression.startAndEndValueSignedOrNull(context)?.let { (startValue, endValue) -> when { startValue > endValue -> holder.registerProblem(expression, downTo = true) diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceRangeToWithUntilInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceRangeToWithUntilInspection.kt index d173eebb382b..8a6fca20638d 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceRangeToWithUntilInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceRangeToWithUntilInspection.kt @@ -29,7 +29,7 @@ class ReplaceRangeToWithUntilInspection : AbstractRangeInspection() { ) } - override fun visitUntil(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) { + override fun visitUntilOrRangeUntil(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) { } override fun visitDownTo(expression: KtExpression, context: BindingContext, holder: ProblemsHolder) { diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index ed36fb99d753..be66efd38b38 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -4660,6 +4660,16 @@ public abstract class LocalInspectionTestGenerated extends AbstractLocalInspecti runTest("testData/inspectionsLocal/emptyRange/downTo2.kt"); } + @TestMetadata("rangeUntil.kt") + public void testRangeUntil() throws Exception { + runTest("testData/inspectionsLocal/emptyRange/rangeUntil.kt"); + } + + @TestMetadata("rangeUntil2.kt") + public void testRangeUntil2() throws Exception { + runTest("testData/inspectionsLocal/emptyRange/rangeUntil2.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("testData/inspectionsLocal/emptyRange/simple.kt"); diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt new file mode 100644 index 000000000000..da809b22e635 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt @@ -0,0 +1,5 @@ +// PROBLEM: This range is empty. Did you mean to use 'downTo'? +// WITH_STDLIB +fun test() { + 0..<-1 +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt.after b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt.after new file mode 100644 index 000000000000..3afd171475d8 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt.after @@ -0,0 +1,5 @@ +// PROBLEM: This range is empty. Did you mean to use 'downTo'? +// WITH_STDLIB +fun test() { + 0 downTo -1 +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt new file mode 100644 index 000000000000..06147f576fb3 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt @@ -0,0 +1,5 @@ +// PROBLEM: This range is empty. Did you mean to use 'rangeTo'? +// WITH_STDLIB +fun test() { + 0..<0 +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt.after b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt.after new file mode 100644 index 000000000000..f8486f65c14b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt.after @@ -0,0 +1,5 @@ +// PROBLEM: This range is empty. Did you mean to use 'rangeTo'? +// WITH_STDLIB +fun test() { + 0..0 +} \ No newline at end of file