diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt index 8a0fb939c91..e969d9a062a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt @@ -139,8 +139,8 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti }, Replacement("java.util.Arrays.copyOfRange", "kotlin.collections.copyOfRange", ToExtensionFunctionWithNonNullableReceiver), // Replacement("java.util.Arrays.binarySearch", "kotlin.collections.binarySearch", ToExtensionFunction), - Replacement("java.util.Arrays.equals", "kotlin.collections.contentEquals", ToExtensionFunctionWithNonNullableReceiver), - Replacement("java.util.Arrays.deepEquals", "kotlin.collections.contentDeepEquals", ToExtensionFunctionWithNonNullableReceiver), + Replacement("java.util.Arrays.equals", "kotlin.collections.contentEquals", ToExtensionFunctionWithNonNullableArguments), + Replacement("java.util.Arrays.deepEquals", "kotlin.collections.contentDeepEquals", ToExtensionFunctionWithNonNullableArguments), // Replacement("java.util.Arrays.fill", "kotlin.collections.fill", ToExtensionFunction), // Replacement("java.util.Arrays.sort", "kotlin.collections.sort", ToExtensionFunction) { // it.valueArguments.size == 3 diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/Transformation.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/Transformation.kt index da7894b1a0f..8199f92871a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/Transformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/jdk2k/Transformation.kt @@ -62,6 +62,21 @@ object ToExtensionFunctionWithNonNullableReceiver : Transformation { ?.isNullable() == false } +object ToExtensionFunctionWithNonNullableArguments : Transformation { + override fun invoke(callExpression: KtCallExpression, replacement: Replacement) = ToExtensionFunctionWithNonNullableReceiver( + callExpression, + replacement + ) + + override fun isApplicable(callExpression: KtCallExpression): Boolean = ToExtensionFunctionWithNonNullableReceiver.isApplicable( + callExpression + ) + + override fun isApplicable(callExpression: KtCallExpression, context: BindingContext): Boolean = callExpression.valueArguments.all { + it.getArgumentExpression()?.getType(context)?.isNullable() == false + } +} + object ToExtensionFunctionWithNullableReceiver : Transformation { override fun invoke(callExpression: KtCallExpression, replacement: Replacement) = ToExtensionFunctionWithNonNullableReceiver( callExpression, diff --git a/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/deepEqualsWithNullOther.kt b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/deepEqualsWithNullOther.kt new file mode 100644 index 00000000000..c1a1d6e380e --- /dev/null +++ b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/deepEqualsWithNullOther.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +// PROBLEM: none +import java.util.Arrays + +fun test() { + val a = arrayOf(1, 2, 3) + val b: Array<*>? = null + val result = Arrays.deepEquals(a, b) +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithNullOther.kt b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithNullOther.kt new file mode 100644 index 00000000000..4553b8cb2e5 --- /dev/null +++ b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithNullOther.kt @@ -0,0 +1,9 @@ +// WITH_RUNTIME +// PROBLEM: none +import java.util.Arrays + +fun test() { + val a = arrayOf(1, 2, 3) + val b: Array<*>? = null + val result = Arrays.equals(a, b) +} \ 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 eef4415569b..9cbbb5a4a50 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -9076,6 +9076,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/deepEquals.kt"); } + @TestMetadata("deepEqualsWithNullOther.kt") + public void testDeepEqualsWithNullOther() throws Exception { + runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/deepEqualsWithNullOther.kt"); + } + @TestMetadata("deepHashCode.kt") public void testDeepHashCode() throws Exception { runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/deepHashCode.kt"); @@ -9091,6 +9096,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equals.kt"); } + @TestMetadata("equalsWithNullOther.kt") + public void testEqualsWithNullOther() throws Exception { + runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/equalsWithNullOther.kt"); + } + @TestMetadata("hashCode.kt") public void testHashCode() throws Exception { runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/collections/hashCode.kt");