diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index 272ef1293fa..53396113f7f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -161,6 +161,9 @@ private fun List.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() diff --git a/idea/testData/refactoring/extractFunction/basic/calleeExpression.kt b/idea/testData/refactoring/extractFunction/basic/calleeExpression.kt new file mode 100644 index 00000000000..c9b51d0d742 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/calleeExpression.kt @@ -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.y() +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/calleeExpression.kt.after b/idea/testData/refactoring/extractFunction/basic/calleeExpression.kt.after new file mode 100644 index 00000000000..c7d3d587662 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/calleeExpression.kt.after @@ -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 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java index eee163ac1f9..686d6c50779 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -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");