diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifiableCallInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifiableCallInspection.kt index 89d355ce615..4210860653c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifiableCallInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifiableCallInspection.kt @@ -11,8 +11,10 @@ import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.project.Project import org.jetbrains.kotlin.KtNodeTypes +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall +import org.jetbrains.kotlin.idea.debugger.sequence.psi.receiverType import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName @@ -87,6 +89,11 @@ class SimplifiableCallInspection : AbstractKotlinInspection() { val reference = lambdaExpression.singleStatement() ?: return null val lambdaParameterName = lambdaExpression.singleLambdaParameterName() ?: return null if (!reference.isNameReferenceTo(lambdaParameterName)) return null + val receiverType = callExpression.receiverType() ?: return null + if (KotlinBuiltIns.isPrimitiveArray(receiverType)) return null + if (KotlinBuiltIns.isArray(receiverType) + && receiverType.arguments.firstOrNull()?.type?.let { KotlinBuiltIns.isArray(it) } != true + ) return null return "flatten()" }), diff --git a/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap.kt b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap.kt new file mode 100644 index 00000000000..7b45805a4ea --- /dev/null +++ b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap.kt @@ -0,0 +1,5 @@ +// PROBLEM: none +// WITH_RUNTIME +fun test() { + arrayOf(listOf(1), listOf(2)).flatMap { it } +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap2.kt b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap2.kt new file mode 100644 index 00000000000..73935c8ab4d --- /dev/null +++ b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap2.kt @@ -0,0 +1,5 @@ +// PROBLEM: none +// WITH_RUNTIME +fun Array>.test() { + flatMap { it } +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt new file mode 100644 index 00000000000..970337af0d6 --- /dev/null +++ b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt @@ -0,0 +1,4 @@ +// WITH_RUNTIME +fun test() { + arrayOf(arrayOf(1, 2), arrayOf(3)).flatMap { it } +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt.after b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt.after new file mode 100644 index 00000000000..a68cf393ee0 --- /dev/null +++ b/idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt.after @@ -0,0 +1,4 @@ +// WITH_RUNTIME +fun test() { + arrayOf(arrayOf(1, 2), arrayOf(3)).flatten() +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/collections/simplifiableCall/primitiveArrayFlatMap.kt b/idea/testData/inspectionsLocal/collections/simplifiableCall/primitiveArrayFlatMap.kt new file mode 100644 index 00000000000..f3b5f4ab36c --- /dev/null +++ b/idea/testData/inspectionsLocal/collections/simplifiableCall/primitiveArrayFlatMap.kt @@ -0,0 +1,6 @@ +// PROBLEM: none +// WITH_RUNTIME +// DISABLE-ERRORS +fun test() { + intArrayOf(1, 2).flatMap { it } +} \ 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 f6f5c45adcc..83b4d10d5be 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -1472,6 +1472,21 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/collections/simplifiableCall"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); } + @TestMetadata("arrayFlatMap.kt") + public void testArrayFlatMap() throws Exception { + runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap.kt"); + } + + @TestMetadata("arrayFlatMap2.kt") + public void testArrayFlatMap2() throws Exception { + runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap2.kt"); + } + + @TestMetadata("arrayFlatMap3.kt") + public void testArrayFlatMap3() throws Exception { + runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/arrayFlatMap3.kt"); + } + @TestMetadata("explicitLambdaParameter.kt") public void testExplicitLambdaParameter() throws Exception { runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/explicitLambdaParameter.kt"); @@ -1547,6 +1562,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/notOnlyReference.kt"); } + @TestMetadata("primitiveArrayFlatMap.kt") + public void testPrimitiveArrayFlatMap() throws Exception { + runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/primitiveArrayFlatMap.kt"); + } + @TestMetadata("set.kt") public void testSet() throws Exception { runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/set.kt");