diff --git a/ChangeLog.md b/ChangeLog.md index a932b644433..dd8695880cc 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -346,6 +346,7 @@ These artifacts include extensions for the types available in the latter JDKs, s - [`KT-14596`](https://youtrack.jetbrains.com/issue/KT-14596) Safe Delete: Fix exception on deleting Java class used in Kotlin import directive(s) - [`KT-14325`](https://youtrack.jetbrains.com/issue/KT-14325) Rename: Fix exceptions on moving file with facade class to another package - [`KT-14197`](https://youtrack.jetbrains.com/issue/KT-14197) Move: Fix callable reference processing when moving to another package +- [`KT-13781`](https://youtrack.jetbrains.com/issue/KT-13781) Extract Function: Do not wrap companion member references inside of the `with` call ## 1.0.5 diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt index 48753ef2b3c..38e86872ae6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt @@ -97,7 +97,8 @@ internal fun ExtractionData.inferParametersInfo( val twoReceivers = resolvedCall != null && resolvedCall.hasBothReceivers() val dispatchReceiverDescriptor = (resolvedCall?.dispatchReceiver as? ImplicitReceiver)?.declarationDescriptor - if (twoReceivers + if (options.canWrapInWith + && twoReceivers && resolvedCall!!.extensionReceiver is ExpressionReceiver && DescriptorUtils.isObject(dispatchReceiverDescriptor)) { info.replacementMap.putValue(refInfo.resolveResult.originalRefExpr, diff --git a/idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt b/idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt new file mode 100644 index 00000000000..191fd4a50c3 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt @@ -0,0 +1,13 @@ +// PARAM_DESCRIPTOR: value-parameter s: kotlin.String defined in Outer.O.f +// PARAM_TYPES: kotlin.String +class Outer { + object O { + fun f(s: String) { + s.funFromCompanion() + } + } + + companion object { + fun String.funFromCompanion(): String = "" + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt.after b/idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt.after new file mode 100644 index 00000000000..fe50e2ef501 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt.after @@ -0,0 +1,17 @@ +// PARAM_DESCRIPTOR: value-parameter s: kotlin.String defined in Outer.O.f +// PARAM_TYPES: kotlin.String +class Outer { + object O { + fun f(s: String) { + __dummyTestFun__(s) + } + + private fun __dummyTestFun__(s: String) { + s.funFromCompanion() + } + } + + companion object { + fun String.funFromCompanion(): String = "" + } +} \ 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 bd908933862..e5cf87c2026 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -874,6 +874,12 @@ public class ExtractionTestGenerated extends AbstractExtractionTest { doExtractFunctionTest(fileName); } + @TestMetadata("companionObjectMemberRef.kt") + public void testCompanionObjectMemberRef() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/companionObjectMemberRef.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("convertBinaryExpression.kt") public void testConvertBinaryExpression() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/convertBinaryExpression.kt");