From b793252a5fbf12e6c989b477d29f18c28d571660 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 8 Aug 2016 18:57:53 +0300 Subject: [PATCH] Extract Function: Skip callable reference selectors #KT-13218 Fixed --- ChangeLog.md | 1 + .../introduce/extractionEngine/ExtractionData.kt | 1 + .../basic/callableReferenceSelector.kt | 13 +++++++++++++ .../basic/callableReferenceSelector.kt.after | 15 +++++++++++++++ .../introduce/ExtractionTestGenerated.java | 6 ++++++ 5 files changed, 36 insertions(+) create mode 100644 idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt create mode 100644 idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt.after diff --git a/ChangeLog.md b/ChangeLog.md index e9eff3a84b2..fc4c88b54a2 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -14,6 +14,7 @@ ###### Issues fixed - [`KT-13383`](https://youtrack.jetbrains.com/issue/KT-13383), [`KT-13379`](https://youtrack.jetbrains.com/issue/KT-13379) Override/Implement Members: Do not make return type non-nullable if base return type is explicitly nullable - [`KT-13244`](https://youtrack.jetbrains.com/issue/KT-13244) Override/Implement Members: Do not expand type aliases in the generated members +- [`KT-13218`](https://youtrack.jetbrains.com/issue/KT-13218) Extract Function: Fix AssertionError on callable references ## 1.1-M01 (EAP-1) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt index ac3d4a705c1..52f56e558b4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt @@ -220,6 +220,7 @@ data class ExtractionData( if (shouldSkipPrimaryReceiver && !(originalResolveResult.resolvedCall?.hasBothReceivers() ?: false)) continue } else { + if (newRef.getParentOfTypeAndBranch { callableReference } != null) continue smartCast = originalContext[BindingContext.SMARTCAST, originalResolveResult.originalRefExpr] possibleTypes = getPossibleTypes(originalResolveResult.originalRefExpr, originalResolveResult.resolvedCall, originalContext) shouldSkipPrimaryReceiver = false diff --git a/idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt b/idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt new file mode 100644 index 00000000000..2088e12dabc --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt @@ -0,0 +1,13 @@ +// WITH_RUNTIME +// PARAM_DESCRIPTOR: value-parameter arg: kotlin.String defined in Foo.Companion.bar +// PARAM_TYPES: kotlin.String + +class Foo { + var arguments: Map? = null + + companion object { + fun bar(arg: String) = Foo().apply { + arguments = mapOf(Foo::arguments.name to arg) + } + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt.after b/idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt.after new file mode 100644 index 00000000000..88cf7a7f83b --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt.after @@ -0,0 +1,15 @@ +// WITH_RUNTIME +// PARAM_DESCRIPTOR: value-parameter arg: kotlin.String defined in Foo.Companion.bar +// PARAM_TYPES: kotlin.String + +class Foo { + var arguments: Map? = null + + companion object { + fun bar(arg: String) = Foo().apply { + arguments = map(arg) + } + + private fun map(arg: String) = mapOf(Foo::arguments.name to arg) + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index 51deba43f85..79e883f33ef 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -831,6 +831,12 @@ public class ExtractionTestGenerated extends AbstractExtractionTest { doExtractFunctionTest(fileName); } + @TestMetadata("callableReferenceSelector.kt") + public void testCallableReferenceSelector() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/callableReferenceSelector.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("calleeExpression.kt") public void testCalleeExpression() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/calleeExpression.kt");