Extract Function: Consider member property with invoke() a receiver candidate
#KT-9774 Fixed
This commit is contained in:
+3
-3
@@ -46,7 +46,6 @@ import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
@@ -235,12 +234,13 @@ data class ExtractionData(
|
||||
val originalFunctionCall = originalResolvedCall?.functionCall
|
||||
val originalVariableCall = originalResolvedCall?.variableCall
|
||||
val invokeDescriptor = originalFunctionCall?.resultingDescriptor
|
||||
if (invokeDescriptor != null && isSynthesizedInvoke(invokeDescriptor) && invokeDescriptor.isExtension) {
|
||||
if (invokeDescriptor != null) {
|
||||
val invokeDeclaration = getDeclaration(invokeDescriptor, context) ?: synthesizedInvokeDeclaration
|
||||
val variableResolveResult = originalResolveResult.copy(resolvedCall = originalVariableCall!!,
|
||||
descriptor = originalVariableCall.resultingDescriptor)
|
||||
val functionResolveResult = originalResolveResult.copy(resolvedCall = originalFunctionCall!!,
|
||||
descriptor = originalFunctionCall.resultingDescriptor,
|
||||
declaration = synthesizedInvokeDeclaration)
|
||||
declaration = invokeDeclaration)
|
||||
referencesInfo.add(ResolvedReferenceInfo(newRef, variableResolveResult, smartCast, possibleTypes))
|
||||
referencesInfo.add(ResolvedReferenceInfo(newRef, functionResolveResult, smartCast, possibleTypes))
|
||||
}
|
||||
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
// PARAM_DESCRIPTOR: public final class A defined in root package
|
||||
// PARAM_TYPES: A
|
||||
// SIBLING:
|
||||
class A {
|
||||
val foo: () -> String = { "OK" }
|
||||
fun bar() = <selection>foo.invoke()</selection>
|
||||
}
|
||||
idea/testData/refactoring/extractFunction/parameters/extractThis/propertyWithExplicitInvoke.kt.after
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
// PARAM_DESCRIPTOR: public final class A defined in root package
|
||||
// PARAM_TYPES: A
|
||||
// SIBLING:
|
||||
class A {
|
||||
val foo: () -> String = { "OK" }
|
||||
fun bar() = s()
|
||||
}
|
||||
|
||||
private fun A.s() = foo.invoke()
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
// PARAM_DESCRIPTOR: public final class A defined in root package
|
||||
// PARAM_TYPES: A
|
||||
// SIBLING:
|
||||
class A {
|
||||
val foo: () -> String = { "OK" }
|
||||
fun bar() = <selection>foo()</selection>
|
||||
}
|
||||
idea/testData/refactoring/extractFunction/parameters/extractThis/propertyWithImplicitInvoke.kt.after
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
// PARAM_DESCRIPTOR: public final class A defined in root package
|
||||
// PARAM_TYPES: A
|
||||
// SIBLING:
|
||||
class A {
|
||||
val foo: () -> String = { "OK" }
|
||||
fun bar() = s()
|
||||
}
|
||||
|
||||
private fun A.s() = foo()
|
||||
+12
@@ -2270,6 +2270,18 @@ public class ExtractionTestGenerated extends AbstractExtractionTest {
|
||||
doExtractFunctionTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("propertyWithExplicitInvoke.kt")
|
||||
public void testPropertyWithExplicitInvoke() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/extractThis/propertyWithExplicitInvoke.kt");
|
||||
doExtractFunctionTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("propertyWithImplicitInvoke.kt")
|
||||
public void testPropertyWithImplicitInvoke() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/extractThis/propertyWithImplicitInvoke.kt");
|
||||
doExtractFunctionTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("qualifiedThis.kt")
|
||||
public void testQualifiedThis() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/extractThis/qualifiedThis.kt");
|
||||
|
||||
Reference in New Issue
Block a user