diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index ee29f325cdd..114d76461df 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -99,8 +99,8 @@ class ConvertLambdaToReferenceIntention : SelfTargetingOffsetIndependentIntentio val lambdaParameterAsExplicitReceiver = explicitReceiverDescriptor != null && explicitReceiverDescriptor == lambdaValueParameterDescriptors.firstOrNull() val explicitReceiverShift = if (lambdaParameterAsExplicitReceiver) 1 else 0 - val lambdaParametersCount = - if (lambdaExpression.functionLiteral.hasParameterSpecification()) lambdaExpression.valueParameters.size else 1 + + val lambdaParametersCount = lambdaValueParameterDescriptors.size if (lambdaParametersCount != callableArgumentsCount + explicitReceiverShift) return false if (explicitReceiver != null && explicitReceiverDescriptor != null && lambdaParameterAsExplicitReceiver) { diff --git a/idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt b/idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt new file mode 100644 index 00000000000..4021297caac --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt @@ -0,0 +1,5 @@ +class Foo +fun usage(f: () -> Foo) {} +fun test() { + usage { Foo() } +} \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt.after b/idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt.after new file mode 100644 index 00000000000..3c61e08f72d --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt.after @@ -0,0 +1,5 @@ +class Foo +fun usage(f: () -> Foo) {} +fun test() { + usage(::Foo) +} \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt b/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt index a9915897475..abfc7ab2a5b 100644 --- a/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt +++ b/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt @@ -1,4 +1,4 @@ -// IS_APPLICABLE: false +// IS_APPLICABLE: true // WITH_RUNTIME fun foo() { diff --git a/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt.after b/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt.after new file mode 100644 index 00000000000..29ed387c4a6 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/nestedLambdaWithReceiver.kt.after @@ -0,0 +1,9 @@ +// IS_APPLICABLE: true +// WITH_RUNTIME + +fun foo() { + listOf(1).forEach { run(it::bar) } +} + +fun Int.bar() { +} \ 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 4072a802439..16fc896daca 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4340,6 +4340,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("defaultConstructor.kt") + public void testDefaultConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/defaultConstructor.kt"); + doTest(fileName); + } + @TestMetadata("defaultNamed.kt") public void testDefaultNamed() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/defaultNamed.kt");