Change Signature: Replace entire JetThisExpression when converting receiver to parameter #KT-7970 Fixed

This commit is contained in:
Alexey Sedunov
2015-06-11 21:15:49 +03:00
parent e481ed756d
commit 64bbbac9dc
4 changed files with 39 additions and 2 deletions
@@ -37,7 +37,8 @@ public abstract class JetExplicitReferenceUsage<T: JetElement>(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
}
}
@@ -0,0 +1,10 @@
// CHECK_ERRORS_AFTER
class C {
fun f() {
fun local(any: Any) {
if (any is String) {
any.length()
}
}
}
}
@@ -0,0 +1,10 @@
// CHECK_ERRORS_AFTER
class C {
fun f() {
fun Any.<caret>local() {
if (this is String) {
this.length()
}
}
}
}
@@ -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);
}
}
}