From e1de80a85bf2ca7902e1d606b5d08df865f8346e Mon Sep 17 00:00:00 2001 From: Nikita Bobko Date: Fri, 29 Jul 2022 19:31:22 +0200 Subject: [PATCH] 2/2 EmptyRangeInspection: support `rangeUntil` operator ^KTIJ-22378 Fixed GitOrigin-RevId: 2d94ee8f6b91e1b32a7cb205ce7e43d0818a6201 --- .../kotlin/idea/inspections/AbstractRangeInspection.kt | 5 ++--- .../kotlin/idea/inspections/EmptyRangeInspection.kt | 2 +- .../inspections/ReplaceRangeToWithUntilInspection.kt | 2 +- .../idea/inspections/LocalInspectionTestGenerated.java | 10 ++++++++++ .../testData/inspectionsLocal/emptyRange/rangeUntil.kt | 5 +++++ .../inspectionsLocal/emptyRange/rangeUntil.kt.after | 5 +++++ .../inspectionsLocal/emptyRange/rangeUntil2.kt | 5 +++++ .../inspectionsLocal/emptyRange/rangeUntil2.kt.after | 5 +++++ 8 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil.kt.after create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/emptyRange/rangeUntil2.kt.after 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