From dd8396efbc8252dadc73814edfabf2a93580891a Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 18 Dec 2019 06:52:46 +0900 Subject: [PATCH] Convert lambda to reference: support nested class constructor call (#2877) #KT-34690 Fixed --- .../idea/intentions/ConvertLambdaToReferenceIntention.kt | 2 +- .../intentions/convertLambdaToReference/constructor2.kt | 9 +++++++++ .../convertLambdaToReference/constructor2.kt.after | 9 +++++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 5 +++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/convertLambdaToReference/constructor2.kt create mode 100644 idea/testData/intentions/convertLambdaToReference/constructor2.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index d20ef968036..b39723cf36f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -78,7 +78,7 @@ open class ConvertLambdaToReferenceIntention(text: String) : dispatchReceiverParameter != null || extensionReceiverParameter != null } - if (!descriptorHasReceiver && explicitReceiver != null) return false + if (!descriptorHasReceiver && explicitReceiver != null && calleeDescriptor !is ClassConstructorDescriptor) return false val noBoundReferences = !callableExpression.languageVersionSettings.supportsFeature(LanguageFeature.BoundCallableReferences) if (noBoundReferences && descriptorHasReceiver && explicitReceiver == null) return false diff --git a/idea/testData/intentions/convertLambdaToReference/constructor2.kt b/idea/testData/intentions/convertLambdaToReference/constructor2.kt new file mode 100644 index 00000000000..19ce535e4b8 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/constructor2.kt @@ -0,0 +1,9 @@ +class A { + class B {} +} + +fun foo(x: () -> A.B) {} + +fun main() { + foo { A.B() } +} \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/constructor2.kt.after b/idea/testData/intentions/convertLambdaToReference/constructor2.kt.after new file mode 100644 index 00000000000..d760fc9ca73 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/constructor2.kt.after @@ -0,0 +1,9 @@ +class A { + class B {} +} + +fun foo(x: () -> A.B) {} + +fun main() { + foo(A::B) +} \ 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 8cbbec717f1..19f6e74437e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4744,6 +4744,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertLambdaToReference/constructor.kt"); } + @TestMetadata("constructor2.kt") + public void testConstructor2() throws Exception { + runTest("idea/testData/intentions/convertLambdaToReference/constructor2.kt"); + } + @TestMetadata("conversion.kt") public void testConversion() throws Exception { runTest("idea/testData/intentions/convertLambdaToReference/conversion.kt");