Extract Function: Fix return type computation for extracted callee expression

#KT-8233 Fixed
This commit is contained in:
Alexey Sedunov
2015-06-25 16:49:44 +03:00
parent febf725e85
commit 1469275a5a
4 changed files with 23 additions and 0 deletions
@@ -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
@@ -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");