diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt index a3b4bb3b984..9e56df0aeb5 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/ExtractableCodeDescriptor.kt @@ -120,6 +120,11 @@ class AddPrefixReplacement(override val parameter: Parameter): ParameterReplacem class FqNameReplacement(val fqName: FqName): Replacement { [suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")] override fun invoke(e: JetElement): JetElement { + val thisExpr = e.getParent() as? JetThisExpression + if (thisExpr != null) { + return thisExpr.replaced(JetPsiFactory(e).createExpression(fqName.asString())).getQualifiedElementSelector()!! + } + val newExpr = (e.getReference() as? JetSimpleNameReference)?.bindToFqName(fqName, ShorteningMode.NO_SHORTENING) as JetElement return if (newExpr is JetQualifiedExpression) newExpr.getSelectorExpression()!! else newExpr } diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt b/idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt new file mode 100644 index 00000000000..a38356aecf4 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt @@ -0,0 +1,9 @@ +package p + +// SIBLING: +object O { + val a = 1 + fun test() { + this.a + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt.after new file mode 100644 index 00000000000..f3ad7b8a0c8 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt.after @@ -0,0 +1,13 @@ +package p + +// SIBLING: +object O { + val a = 1 + fun test() { + unit() + } +} + +private fun unit() { + O.a +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java index d5004772e6e..d174a96314d 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java @@ -1625,6 +1625,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doExtractFunctionTest(fileName); } + @TestMetadata("thisInObject.kt") + public void testThisInObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/misc/thisInObject.kt"); + doExtractFunctionTest(fileName); + } + @TestMetadata("typeRef.kt") public void testTypeRef() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/parameters/misc/typeRef.kt");