Convert lambda to reference: support nested class constructor call (#2877)

#KT-34690 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-12-18 06:52:46 +09:00
committed by Vladimir Dolzhenko
parent 646c7ad0af
commit dd8396efbc
4 changed files with 24 additions and 1 deletions
@@ -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
@@ -0,0 +1,9 @@
class A {
class B {}
}
fun foo(x: () -> A.B) {}
fun main() {
foo <caret>{ A.B() }
}
@@ -0,0 +1,9 @@
class A {
class B {}
}
fun foo(x: () -> A.B) {}
fun main() {
foo(A::B)
}
@@ -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");