From 835532c20693597f5a9bb33467553626c7a14e6a Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 9 Jul 2019 10:53:34 +0300 Subject: [PATCH] ReplaceJavaStaticMethodWithKotlinAnalogInspection: move to move to inspections.jdk2k subpackage --- idea/resources/META-INF/plugin-common.xml | 2 +- ...aStaticMethodWithKotlinAnalogInspection.kt | 200 ++++++++++++++---- .../.inspection | 2 +- 3 files changed, 157 insertions(+), 47 deletions(-) rename idea/src/org/jetbrains/kotlin/idea/inspections/{ => jdk2k}/ReplaceJavaStaticMethodWithKotlinAnalogInspection.kt (59%) diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index dc28290787f..f063925f706 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -3373,7 +3373,7 @@ language="kotlin" /> - Boolean = { true } - ) { - private fun String.shortName() = takeLastWhile { it != '.' } - - val javaMethodShortName = javaMethodFqName.shortName() - - val kotlinFunctionShortName = kotlinFunctionFqName.shortName() - } - companion object { private val JAVA_PRIMITIVES = listOf( "Integer" to "Int", @@ -117,18 +109,34 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti "kotlin.primitives.$kotlinPrimitive.toString", toExtensionFunction = true ) { call -> call.valueArguments.size == 1 }, - Replacement("java.lang.$javaPrimitive.compare", "kotlin.primitives.$kotlinPrimitive.compareTo", toExtensionFunction = true) + Replacement( + "java.lang.$javaPrimitive.compare", + "kotlin.primitives.$kotlinPrimitive.compareTo", + toExtensionFunction = true + ) ) } private val JAVA_IO = listOf( - Replacement("java.io.PrintStream.print", "kotlin.io.print", filter = ::isJavaSystemOut), - Replacement("java.io.PrintStream.println", "kotlin.io.println", filter = ::isJavaSystemOut) + Replacement( + "java.io.PrintStream.print", + "kotlin.io.print", + filter = ::isJavaSystemOut + ), + Replacement( + "java.io.PrintStream.println", + "kotlin.io.println", + filter = ::isJavaSystemOut + ) ) private val JAVA_SYSTEM = listOf( Replacement("java.lang.System.exit", "kotlin.system.exitProcess"), - Replacement("java.lang.System.arraycopy", "kotlin.collections.copyInto", toExtensionFunction = true) // TODO: mapping + Replacement( + "java.lang.System.arraycopy", + "kotlin.collections.copyInto", + toExtensionFunction = true + ) // TODO: mapping ) private val JAVA_MATH = listOf( @@ -144,49 +152,137 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti Replacement("java.lang.Math.expm1", "kotlin.math.expm1"), Replacement("java.lang.Math.floor", "kotlin.math.floor"), Replacement("java.lang.Math.hypot", "kotlin.math.hypot"), - Replacement("java.lang.Math.IEEEremainder", "kotlin.math.IEEErem", toExtensionFunction = true), + Replacement( + "java.lang.Math.IEEEremainder", + "kotlin.math.IEEErem", + toExtensionFunction = true + ), Replacement("java.lang.Math.log", "kotlin.math.ln"), Replacement("java.lang.Math.log1p", "kotlin.math.ln1p"), Replacement("java.lang.Math.log10", "kotlin.math.log10"), Replacement("java.lang.Math.max", "kotlin.math.max"), - Replacement("java.lang.Math.max", "kotlin.ranges.coerceAtLeast", toExtensionFunction = true), + Replacement( + "java.lang.Math.max", + "kotlin.ranges.coerceAtLeast", + toExtensionFunction = true + ), Replacement("java.lang.Math.min", "kotlin.math.min"), - Replacement("java.lang.Math.min", "kotlin.ranges.coerceAtMost", toExtensionFunction = true), - Replacement("java.lang.Math.nextDown", "kotlin.math.nextDown", toExtensionFunction = true), - Replacement("java.lang.Math.nextAfter", "kotlin.math.nextTowards", toExtensionFunction = true), - Replacement("java.lang.Math.nextUp", "kotlin.math.nextUp", toExtensionFunction = true), - Replacement("java.lang.Math.pow", "kotlin.math.pow", toExtensionFunction = true), + Replacement( + "java.lang.Math.min", + "kotlin.ranges.coerceAtMost", + toExtensionFunction = true + ), + Replacement( + "java.lang.Math.nextDown", + "kotlin.math.nextDown", + toExtensionFunction = true + ), + Replacement( + "java.lang.Math.nextAfter", + "kotlin.math.nextTowards", + toExtensionFunction = true + ), + Replacement( + "java.lang.Math.nextUp", + "kotlin.math.nextUp", + toExtensionFunction = true + ), + Replacement( + "java.lang.Math.pow", + "kotlin.math.pow", + toExtensionFunction = true + ), Replacement("java.lang.Math.rint", "kotlin.math.round"), - Replacement("java.lang.Math.round", "kotlin.math.roundToLong", toExtensionFunction = true), - Replacement("java.lang.Math.round", "kotlin.math.roundToInt", toExtensionFunction = true), + Replacement( + "java.lang.Math.round", + "kotlin.math.roundToLong", + toExtensionFunction = true + ), + Replacement( + "java.lang.Math.round", + "kotlin.math.roundToInt", + toExtensionFunction = true + ), Replacement("java.lang.Math.signum", "kotlin.math.sign"), Replacement("java.lang.Math.sin", "kotlin.math.sin"), Replacement("java.lang.Math.sinh", "kotlin.math.sinh"), Replacement("java.lang.Math.sqrt", "kotlin.math.sqrt"), Replacement("java.lang.Math.tan", "kotlin.math.tan"), Replacement("java.lang.Math.tanh", "kotlin.math.tanh"), - Replacement("java.lang.Math.copySign", "kotlin.math.withSign", toExtensionFunction = true) + Replacement( + "java.lang.Math.copySign", + "kotlin.math.withSign", + toExtensionFunction = true + ) ) private val JAVA_COLLECTIONS = listOf( - Replacement("java.util.Arrays.copyOf", "kotlin.collections.copyOf", toExtensionFunction = true) { + Replacement( + "java.util.Arrays.copyOf", + "kotlin.collections.copyOf", + toExtensionFunction = true + ) { it.valueArguments.size == 2 }, - Replacement("java.util.Arrays.copyOfRange", "kotlin.collections.copyOfRange", toExtensionFunction = true), - Replacement("java.util.Arrays.binarySearch", "kotlin.collections.binarySearch", toExtensionFunction = true), // TODO: mapping - Replacement("java.util.Arrays.equals", "kotlin.collections.contentEquals", toExtensionFunction = true), - Replacement("java.util.Arrays.deepEquals", "kotlin.collections.contentDeepEquals", toExtensionFunction = true), - Replacement("java.util.Arrays.fill", "kotlin.collections.fill", toExtensionFunction = true), // TODO: mapping - Replacement("java.util.Arrays.sort", "kotlin.collections.sort", toExtensionFunction = true) { + Replacement( + "java.util.Arrays.copyOfRange", + "kotlin.collections.copyOfRange", + toExtensionFunction = true + ), + Replacement( + "java.util.Arrays.binarySearch", + "kotlin.collections.binarySearch", + toExtensionFunction = true + ), // TODO: mapping + Replacement( + "java.util.Arrays.equals", + "kotlin.collections.contentEquals", + toExtensionFunction = true + ), + Replacement( + "java.util.Arrays.deepEquals", + "kotlin.collections.contentDeepEquals", + toExtensionFunction = true + ), + Replacement( + "java.util.Arrays.fill", + "kotlin.collections.fill", + toExtensionFunction = true + ), // TODO: mapping + Replacement( + "java.util.Arrays.sort", + "kotlin.collections.sort", + toExtensionFunction = true + ) { it.valueArguments.size == 3 }, //TODO: mapping? - Replacement("java.util.Arrays.sort", "kotlin.collections.sortWith", toExtensionFunction = true) { + Replacement( + "java.util.Arrays.sort", + "kotlin.collections.sortWith", + toExtensionFunction = true + ) { it.valueArguments.size != 3 }, - Replacement("java.util.Arrays.deepHashCode", "kotlin.collections.contentDeepHashCode", toExtensionFunction = true), - Replacement("java.util.Arrays.hashCode", "kotlin.collections.contentHashCode", toExtensionFunction = true), - Replacement("java.util.Arrays.deepToString", "kotlin.collections.contentDeepToString", toExtensionFunction = true), - Replacement("java.util.Arrays.toString", "kotlin.collections.contentToString", toExtensionFunction = true), + Replacement( + "java.util.Arrays.deepHashCode", + "kotlin.collections.contentDeepHashCode", + toExtensionFunction = true + ), + Replacement( + "java.util.Arrays.hashCode", + "kotlin.collections.contentHashCode", + toExtensionFunction = true + ), + Replacement( + "java.util.Arrays.deepToString", + "kotlin.collections.contentDeepToString", + toExtensionFunction = true + ), + Replacement( + "java.util.Arrays.toString", + "kotlin.collections.contentToString", + toExtensionFunction = true + ), Replacement("java.util.Arrays.asList", "kotlin.collections.listOf"), Replacement("java.util.Arrays.asList", "kotlin.collections.mutableListOf"), Replacement("java.util.Set.of", "kotlin.collections.setOf"), @@ -204,7 +300,21 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti } } -private fun isJavaSystemOut(callExpression: KtCallExpression): Boolean = (callExpression.calleeExpression as? KtSimpleNameExpression) - ?.getReceiverExpression() - ?.resolveToCall() - ?.isCalling(FqName("java.lang.System.out")) ?: false \ No newline at end of file +data class Replacement( + val javaMethodFqName: String, + val kotlinFunctionFqName: String, + val toExtensionFunction: Boolean = false, + val filter: (KtCallExpression) -> Boolean = { true } +) { + private fun String.shortName() = takeLastWhile { it != '.' } + + val javaMethodShortName = javaMethodFqName.shortName() + + val kotlinFunctionShortName = kotlinFunctionFqName.shortName() +} + +private fun isJavaSystemOut(callExpression: KtCallExpression): Boolean = + (callExpression.calleeExpression as? KtSimpleNameExpression) + ?.getReceiverExpression() + ?.resolveToCall() + ?.isCalling(FqName("java.lang.System.out")) ?: false \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/.inspection b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/.inspection index 885e51fc069..fd45d9d7b8f 100644 --- a/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/.inspection +++ b/idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/.inspection @@ -1 +1 @@ -org.jetbrains.kotlin.idea.inspections.ReplaceJavaStaticMethodWithKotlinAnalogInspection \ No newline at end of file +org.jetbrains.kotlin.idea.inspections.jdk2k.ReplaceJavaStaticMethodWithKotlinAnalogInspection \ No newline at end of file