diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index f658f800c5b..37cc79f5b88 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -97,10 +97,13 @@ open class ConvertLambdaToReferenceIntention(text: String) : } } + val lambdaValueParameterDescriptors = context[FUNCTION, lambdaExpression.functionLiteral]?.valueParameters ?: return false + if (explicitReceiver is KtClassLiteralExpression + && explicitReceiver.receiverExpression?.getCallableDescriptor() in lambdaValueParameterDescriptors + ) return false val explicitReceiverDescriptor = (explicitReceiver as? KtNameReferenceExpression)?.let { context[REFERENCE_TARGET, it] } as? ValueDescriptor - val lambdaValueParameterDescriptors = context[FUNCTION, lambdaExpression.functionLiteral]?.valueParameters ?: return false val lambdaParameterAsExplicitReceiver = when (noBoundReferences) { true -> explicitReceiver != null false -> explicitReceiverDescriptor != null && explicitReceiverDescriptor == lambdaValueParameterDescriptors.firstOrNull() diff --git a/idea/testData/intentions/convertLambdaToReference/classReference.kt b/idea/testData/intentions/convertLambdaToReference/classReference.kt new file mode 100644 index 00000000000..a65b8b2766e --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/classReference.kt @@ -0,0 +1 @@ +val isInt: (Any) -> Boolean = { a -> Int::class.isInstance(a) } \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/classReference.kt.after b/idea/testData/intentions/convertLambdaToReference/classReference.kt.after new file mode 100644 index 00000000000..a14cb72ee51 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/classReference.kt.after @@ -0,0 +1 @@ +val isInt: (Any) -> Boolean = Int::class::isInstance \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/classReference2.kt b/idea/testData/intentions/convertLambdaToReference/classReference2.kt new file mode 100644 index 00000000000..d67b09ec1b9 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/classReference2.kt @@ -0,0 +1,2 @@ +// IS_APPLICABLE: false +val f: (Any) -> Boolean = { a -> a::class.isInstance(a) } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 1fcce7afba6..a0b1ced6d5b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -5070,6 +5070,16 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertLambdaToReference/argumentWithReceiver.kt"); } + @TestMetadata("classReference.kt") + public void testClassReference() throws Exception { + runTest("idea/testData/intentions/convertLambdaToReference/classReference.kt"); + } + + @TestMetadata("classReference2.kt") + public void testClassReference2() throws Exception { + runTest("idea/testData/intentions/convertLambdaToReference/classReference2.kt"); + } + @TestMetadata("companion.kt") public void testCompanion() throws Exception { runTest("idea/testData/intentions/convertLambdaToReference/companion.kt");