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
|
if (options.inferUnitTypeForUnusedValues && expression.isUsedAsStatement(bindingContext)) return null
|
||||||
|
|
||||||
return bindingContext.getType(expression)
|
return bindingContext.getType(expression)
|
||||||
|
?: (expression as? JetReferenceExpression)?.let {
|
||||||
|
(bindingContext[BindingContext.REFERENCE_TARGET, it] as? CallableDescriptor)?.getReturnType()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val resultTypes = map(::instructionToType).filterNotNull()
|
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);
|
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")
|
@TestMetadata("delegatingFunction.kt")
|
||||||
public void testDelegatingFunction() throws Exception {
|
public void testDelegatingFunction() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/delegatingFunction.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/delegatingFunction.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user