Extract Function: Fix return type computation for extracted callee expression
#KT-8233 Fixed
This commit is contained in:
+3
@@ -161,6 +161,9 @@ private fun List<Instruction>.getResultTypeAndExpressions(
|
||||
if (options.inferUnitTypeForUnusedValues && expression.isUsedAsStatement(bindingContext)) return null
|
||||
|
||||
return bindingContext.getType(expression)
|
||||
?: (expression as? JetReferenceExpression)?.let {
|
||||
(bindingContext[BindingContext.REFERENCE_TARGET, it] as? CallableDescriptor)?.getReturnType()
|
||||
}
|
||||
}
|
||||
|
||||
val resultTypes = map(::instructionToType).filterNotNull()
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// PARAM_DESCRIPTOR: value-parameter val y: kotlin.String.() -> kotlin.Unit defined in foo
|
||||
// PARAM_TYPES: kotlin.String.() -> kotlin.Unit
|
||||
|
||||
fun foo(x : String, y : String.() -> Unit) {
|
||||
x.<selection>y</selection>()
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// PARAM_DESCRIPTOR: value-parameter val y: kotlin.String.() -> kotlin.Unit defined in foo
|
||||
// PARAM_TYPES: kotlin.String.() -> kotlin.Unit
|
||||
|
||||
fun foo(x : String, y : String.() -> Unit) {
|
||||
x.(function(y))()
|
||||
}
|
||||
|
||||
private fun function(y: String.() -> Unit) = y
|
||||
+6
@@ -348,6 +348,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
|
||||
doExtractFunctionTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("calleeExpression.kt")
|
||||
public void testCalleeExpression() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/calleeExpression.kt");
|
||||
doExtractFunctionTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("delegatingFunction.kt")
|
||||
public void testDelegatingFunction() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/delegatingFunction.kt");
|
||||
|
||||
Reference in New Issue
Block a user