diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetParameterUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetParameterUsage.kt index a92346a0e2a..5af65b9a57b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetParameterUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetParameterUsage.kt @@ -37,7 +37,8 @@ public abstract class JetExplicitReferenceUsage(element: T) : Jet override fun processUsage(changeInfo: JetChangeInfo, element: T): Boolean { val newElement = JetPsiFactory(element.getProject()).createExpression(getReplacementText(changeInfo)) - processReplacedElement(element.replace(newElement) as JetElement) + val elementToReplace = (element.getParent() as? JetThisExpression) ?: element + processReplacedElement(elementToReplace.replace(newElement) as JetElement) return false } } diff --git a/idea/testData/refactoring/changeSignature/ThisReplacementAfter.kt b/idea/testData/refactoring/changeSignature/ThisReplacementAfter.kt new file mode 100644 index 00000000000..a0f0512cc18 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ThisReplacementAfter.kt @@ -0,0 +1,10 @@ +// CHECK_ERRORS_AFTER +class C { + fun f() { + fun local(any: Any) { + if (any is String) { + any.length() + } + } + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ThisReplacementBefore.kt b/idea/testData/refactoring/changeSignature/ThisReplacementBefore.kt new file mode 100644 index 00000000000..db43f5ea1b1 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ThisReplacementBefore.kt @@ -0,0 +1,10 @@ +// CHECK_ERRORS_AFTER +class C { + fun f() { + fun Any.local() { + if (this is String) { + this.length() + } + } + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java index cb03ebe23b0..b7a39581505 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -37,13 +37,16 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor; import org.jetbrains.kotlin.descriptors.Visibilities; import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage; import org.jetbrains.kotlin.idea.refactoring.JetRefactoringBundle; +import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils; import org.jetbrains.kotlin.idea.test.KotlinCodeInsightTestCase; import org.jetbrains.kotlin.idea.test.PluginTestCaseBase; import org.jetbrains.kotlin.psi.JetElement; +import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.psi.JetPsiFactory; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.dataClassUtils.DataClassUtilsPackage; import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode; +import org.jetbrains.kotlin.test.InTextDirectivesUtils; import java.io.File; import java.util.*; @@ -930,6 +933,12 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testThisReplacement() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + changeInfo.setReceiverParameterInfo(null); + doTest(changeInfo); + } + @NotNull @Override protected String getTestDataPath() { @@ -1037,9 +1046,16 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { } private void compareEditorsWithExpectedData() throws Exception { + //noinspection ConstantConditions + boolean checkErrorsAfter = InTextDirectivesUtils.isDirectiveDefined(getPsiFile(editors.get(0).getDocument()).getText(), + "// CHECK_ERRORS_AFTER"); for (Editor editor : editors) { setActiveEditor(editor); - checkResultByFile(getFile().getName().replace("Before.", "After.")); + PsiFile currentFile = getFile(); + checkResultByFile(currentFile.getName().replace("Before.", "After.")); + if (checkErrorsAfter && currentFile instanceof JetFile) { + DirectiveBasedActionUtils.checkForUnexpectedErrors((JetFile) currentFile); + } } }