Lambda to reference: fix false positive for parameter' class reference
So #KT-22041 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
271cbc1dd3
commit
b5e3db1811
@@ -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 {
|
val explicitReceiverDescriptor = (explicitReceiver as? KtNameReferenceExpression)?.let {
|
||||||
context[REFERENCE_TARGET, it]
|
context[REFERENCE_TARGET, it]
|
||||||
} as? ValueDescriptor
|
} as? ValueDescriptor
|
||||||
val lambdaValueParameterDescriptors = context[FUNCTION, lambdaExpression.functionLiteral]?.valueParameters ?: return false
|
|
||||||
val lambdaParameterAsExplicitReceiver = when (noBoundReferences) {
|
val lambdaParameterAsExplicitReceiver = when (noBoundReferences) {
|
||||||
true -> explicitReceiver != null
|
true -> explicitReceiver != null
|
||||||
false -> explicitReceiverDescriptor != null && explicitReceiverDescriptor == lambdaValueParameterDescriptors.firstOrNull()
|
false -> explicitReceiverDescriptor != null && explicitReceiverDescriptor == lambdaValueParameterDescriptors.firstOrNull()
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
val isInt: (Any) -> Boolean = <caret>{ a -> Int::class.isInstance(a) }
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
val isInt: (Any) -> Boolean = <caret>Int::class::isInstance
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
val f: (Any) -> Boolean = <caret>{ a -> a::class.isInstance(a) }
|
||||||
@@ -5070,6 +5070,16 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
runTest("idea/testData/intentions/convertLambdaToReference/argumentWithReceiver.kt");
|
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")
|
@TestMetadata("companion.kt")
|
||||||
public void testCompanion() throws Exception {
|
public void testCompanion() throws Exception {
|
||||||
runTest("idea/testData/intentions/convertLambdaToReference/companion.kt");
|
runTest("idea/testData/intentions/convertLambdaToReference/companion.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user