diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index d9a73fa0cde..768002d0733 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor +import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.descriptors.* @@ -25,6 +26,9 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.isVisible import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.getStartOffsetIn +import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor @@ -35,7 +39,12 @@ import org.jetbrains.kotlin.types.typeUtil.isUnit class ConvertLambdaToReferenceInspection() : IntentionBasedInspection( ConvertLambdaToReferenceIntention::class, { it -> ConvertLambdaToReferenceIntention.shouldSuggestToConvert(it) } -) +) { + override fun inspectionRange(element: KtLambdaExpression) = element.bodyExpression?.statements?.singleOrNull()?.let { + val start = it.getStartOffsetIn(element) + TextRange(start, start + it.endOffset - it.startOffset) + } +} class ConvertLambdaToReferenceIntention : SelfTargetingOffsetIndependentIntention( KtLambdaExpression::class.java, "Convert lambda to reference" diff --git a/idea/testData/inspections/convertLambdaToReference/inspectionData/expected.xml b/idea/testData/inspections/convertLambdaToReference/inspectionData/expected.xml index 0990a51a52f..da0cde82bb0 100644 --- a/idea/testData/inspections/convertLambdaToReference/inspectionData/expected.xml +++ b/idea/testData/inspections/convertLambdaToReference/inspectionData/expected.xml @@ -7,4 +7,12 @@ Can be replaced with function reference Convert lambda to reference + + test.kt + 14 + light_idea_test_case + + Can be replaced with function reference + Convert lambda to reference + \ No newline at end of file diff --git a/idea/testData/inspections/convertLambdaToReference/test.kt b/idea/testData/inspections/convertLambdaToReference/test.kt index 7edab1a170d..abaa19071b9 100644 --- a/idea/testData/inspections/convertLambdaToReference/test.kt +++ b/idea/testData/inspections/convertLambdaToReference/test.kt @@ -6,4 +6,10 @@ val x = { y: Int -> TheirWrapper(y) } // Should not suggest to convert (too long reference) fun foo(arg: TheirWrapper, convert: (TheirWrapper) -> String) = convert(arg) -val y = foo(TheirWrapper(42)) { it.toString() } \ No newline at end of file +val y = foo(TheirWrapper(42)) { it.toString() } + +// Also should suggest to convert, but only call should be highlighted +fun bar(arg: Int, convert: (Int) -> TheirWrapper) = convert(arg) +val z = bar(42) { + TheirWrapper(it) +} \ No newline at end of file