Fix parameter handling in "Move suspicious reference into parentheses"
Related to KT-21743
This commit is contained in:
+7
-2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype
|
|||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.intentions.ConvertLambdaToReferenceIntention
|
import org.jetbrains.kotlin.idea.intentions.ConvertLambdaToReferenceIntention
|
||||||
import org.jetbrains.kotlin.idea.intentions.getCallableDescriptor
|
import org.jetbrains.kotlin.idea.intentions.getCallableDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
||||||
@@ -67,12 +68,16 @@ class MoveSuspiciousCallableReferenceIntoParenthesesInspection : AbstractKotlinI
|
|||||||
""
|
""
|
||||||
} else {
|
} else {
|
||||||
val descriptor = receiverExpression.getCallableDescriptor()
|
val descriptor = receiverExpression.getCallableDescriptor()
|
||||||
if (descriptor == null || descriptor is ValueParameterDescriptor)
|
val literal = element.functionLiteral
|
||||||
|
if (descriptor == null ||
|
||||||
|
descriptor is ValueParameterDescriptor && descriptor.containingDeclaration == literal.resolveToDescriptorIfAny()
|
||||||
|
) {
|
||||||
callableReference.resolveToCall(BodyResolveMode.FULL)
|
callableReference.resolveToCall(BodyResolveMode.FULL)
|
||||||
?.let { it.extensionReceiver ?: it.dispatchReceiver }
|
?.let { it.extensionReceiver ?: it.dispatchReceiver }
|
||||||
?.let { "${it.type}" } ?: ""
|
?.let { "${it.type}" } ?: ""
|
||||||
else
|
} else {
|
||||||
receiverExpression.text
|
receiverExpression.text
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return "$receiver::${callableReference.text}"
|
return "$receiver::${callableReference.text}"
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+6
@@ -0,0 +1,6 @@
|
|||||||
|
// FIX: Move suspicious callable reference into parentheses '()'
|
||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
fun foo(bar: Int) {
|
||||||
|
listOf(1,2,3).map {<caret> bar::plus }
|
||||||
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
// FIX: Move suspicious callable reference into parentheses '()'
|
||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
fun foo(bar: Int) {
|
||||||
|
listOf(1,2,3).map(bar::plus)
|
||||||
|
}
|
||||||
+6
@@ -2361,6 +2361,12 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("parameterOuter.kt")
|
||||||
|
public void testParameterOuter() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/moveSuspiciousCallableReferenceIntoParentheses/parameterOuter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("variableReceiver.kt")
|
@TestMetadata("variableReceiver.kt")
|
||||||
public void testVariableReceiver() throws Exception {
|
public void testVariableReceiver() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/moveSuspiciousCallableReferenceIntoParentheses/variableReceiver.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/moveSuspiciousCallableReferenceIntoParentheses/variableReceiver.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user