diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantLambdaArrowInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantLambdaArrowInspection.kt index 5cf793380c5..7d89a0336f7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantLambdaArrowInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantLambdaArrowInspection.kt @@ -14,10 +14,12 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.KtNodeTypes +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore class RedundantLambdaArrowInspection : AbstractKotlinInspection() { @@ -42,6 +44,11 @@ class RedundantLambdaArrowInspection : AbstractKotlinInspection() { if (callee != null && callee.getReferencedName() == "forEach" && singleParameter?.name != "it") return } + if (parameters.isNotEmpty()) { + val context = lambdaExpression.analyze() + if (context[BindingContext.EXPECTED_EXPRESSION_TYPE, lambdaExpression] == null) return + } + val startOffset = functionLiteral.startOffset holder.registerProblem( holder.manager.createProblemDescriptor( diff --git a/idea/testData/inspectionsLocal/redundantLambdaArrow/noExpectedType.kt b/idea/testData/inspectionsLocal/redundantLambdaArrow/noExpectedType.kt new file mode 100644 index 00000000000..6680c139887 --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantLambdaArrow/noExpectedType.kt @@ -0,0 +1,5 @@ +// PROBLEM: none + +fun foo(x: Int) = x + +val x = { it: Int -> foo(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 b7bc4bcd650..c078a5d06c5 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -4938,6 +4938,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/redundantLambdaArrow/it.kt"); } + @TestMetadata("noExpectedType.kt") + public void testNoExpectedType() throws Exception { + runTest("idea/testData/inspectionsLocal/redundantLambdaArrow/noExpectedType.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("idea/testData/inspectionsLocal/redundantLambdaArrow/simple.kt");