diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConvertTwoComparisonsToRangeCheckInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConvertTwoComparisonsToRangeCheckInspection.kt index eff3c4fa62d..39fb78cd246 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConvertTwoComparisonsToRangeCheckInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConvertTwoComparisonsToRangeCheckInspection.kt @@ -111,10 +111,24 @@ class ConvertTwoComparisonsToRangeCheckInspection : is KtConstantExpression -> { val constantValue = ConstantExpressionEvaluator.getConstant(this, context)?.getValue(type) ?: return null return when { - KotlinBuiltIns.isInt(type) -> (constantValue as Int + number).toString() - KotlinBuiltIns.isLong(type) -> (constantValue as Long + number).toString() + KotlinBuiltIns.isInt(type) -> (constantValue as Int + number).let { + val text = this.text + when { + text.startsWith("0x") -> "0x${it.toString(16)}" + text.startsWith("0b") -> "0b${it.toString(2)}" + else -> it.toString() + } + } + KotlinBuiltIns.isLong(type) -> (constantValue as Long + number).let { + val text = this.text + when { + text.startsWith("0x") -> "0x${it.toString(16)}" + text.startsWith("0b") -> "0b${it.toString(2)}" + else -> it.toString() + } + } KotlinBuiltIns.isChar(type) -> "'${constantValue as Char + number}'" - else -> return null + else -> null } } else -> return if (number >= 0) "($text + $number)" else "($text - ${-number})" diff --git a/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt new file mode 100644 index 00000000000..4df600b6dea --- /dev/null +++ b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt @@ -0,0 +1,4 @@ +fun test(c: Int) { + if (c > 0b1101100000000000 && c < 0b1101110000000000) { + } +} diff --git a/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt.after b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt.after new file mode 100644 index 00000000000..9d7ba8c6746 --- /dev/null +++ b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt.after @@ -0,0 +1,4 @@ +fun test(c: Int) { + if (c in 0b1101100000000001..0b1101101111111111) { + } +} diff --git a/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt new file mode 100644 index 00000000000..b82aa1ee8e6 --- /dev/null +++ b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt @@ -0,0 +1,4 @@ +fun test(c: Int) { + if (c > 0xd800 && c < 0xdc00) { + } +} diff --git a/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt.after b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt.after new file mode 100644 index 00000000000..bf09db8a664 --- /dev/null +++ b/idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt.after @@ -0,0 +1,4 @@ +fun test(c: Int) { + if (c in 0xd801..0xdbff) { + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index feb2884a5f0..f5d2be81a30 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -3438,6 +3438,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true); } + @TestMetadata("binary.kt") + public void testBinary() throws Exception { + runTest("idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/binary.kt"); + } + @TestMetadata("char.kt") public void testChar() throws Exception { runTest("idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/char.kt"); @@ -3543,6 +3548,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/gtlteq.kt"); } + @TestMetadata("hexadecimal.kt") + public void testHexadecimal() throws Exception { + runTest("idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/hexadecimal.kt"); + } + @TestMetadata("lteqgt.kt") public void testLteqgt() throws Exception { runTest("idea/testData/inspectionsLocal/convertTwoComparisonsToRangeCheck/lteqgt.kt");