Rename: Fix class rename by constructor reference
This commit is contained in:
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.refactoring.rename;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -28,17 +27,16 @@ import org.jetbrains.kotlin.asJava.KotlinLightClass;
|
||||
import org.jetbrains.kotlin.asJava.KotlinLightClassForExplicitDeclaration;
|
||||
import org.jetbrains.kotlin.asJava.KotlinLightClassForPackage;
|
||||
import org.jetbrains.kotlin.idea.JetBundle;
|
||||
import org.jetbrains.kotlin.psi.JetClass;
|
||||
import org.jetbrains.kotlin.psi.JetClassOrObject;
|
||||
import org.jetbrains.kotlin.psi.JetConstructor;
|
||||
import org.jetbrains.kotlin.psi.JetFile;
|
||||
import org.jetbrains.kotlin.psi.JetSecondaryConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class RenameJetClassProcessor extends RenameKotlinPsiProcessor {
|
||||
@Override
|
||||
public boolean canProcessElement(@NotNull PsiElement element) {
|
||||
return element instanceof JetClassOrObject || element instanceof KotlinLightClass || element instanceof JetSecondaryConstructor;
|
||||
return element instanceof JetClassOrObject || element instanceof KotlinLightClass || element instanceof JetConstructor;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -86,8 +84,8 @@ public class RenameJetClassProcessor extends RenameKotlinPsiProcessor {
|
||||
assert false : "Should not be suggested to rename element of type " + element.getClass() + " " + element;
|
||||
}
|
||||
}
|
||||
else if (element instanceof JetSecondaryConstructor) {
|
||||
return PsiTreeUtil.getParentOfType(element, JetClassOrObject.class);
|
||||
else if (element instanceof JetConstructor) {
|
||||
return ((JetConstructor) element).getContainingClassOrObject();
|
||||
}
|
||||
|
||||
return (JetClassOrObject) element;
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package testing.rename
|
||||
|
||||
public open class B() {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
/*rename*/B()
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package testing.rename
|
||||
|
||||
public open class A() {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
/*rename*/A()
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"type": "MARKED_ELEMENT",
|
||||
"mainFile": "test.kt",
|
||||
"newName": "B",
|
||||
"byRef": "true"
|
||||
}
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import com.google.gson.JsonParser
|
||||
import com.intellij.codeInsight.TargetElementUtilBase
|
||||
import com.intellij.openapi.extensions.Extensions
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.module.Module
|
||||
@@ -138,7 +139,14 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
val marker = psiFile.getText().indexOf(MARKER_TEXT)
|
||||
assert(marker != -1)
|
||||
|
||||
val toRename = psiFile.findElementAt(marker + MARKER_TEXT.length())!!.getNonStrictParentOfType<PsiNamedElement>()!!
|
||||
val toRename = if (renameParamsObject["byRef"]?.getAsBoolean() ?: false) {
|
||||
val editor = createEditor(mainFile)
|
||||
editor.getCaretModel().moveToOffset(marker + MARKER_TEXT.length())
|
||||
TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted())!!
|
||||
}
|
||||
else {
|
||||
psiFile.findElementAt(marker + MARKER_TEXT.length())!!.getNonStrictParentOfType<PsiNamedElement>()!!
|
||||
}
|
||||
val substitution = RenamePsiElementProcessor.forElement(toRename).substituteElementToRename(toRename, null)
|
||||
|
||||
runRenameProcessor(context, newName, substitution, true, true)
|
||||
|
||||
@@ -221,6 +221,12 @@ public class RenameTestGenerated extends AbstractRenameTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("renameKotlinClassByConstructorRef/kotlinClass.test")
|
||||
public void testRenameKotlinClassByConstructorRef_KotlinClass() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinClassByConstructorRef/kotlinClass.test");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("renameKotlinClassConstructor/renameKotlinConstructor.test")
|
||||
public void testRenameKotlinClassConstructor_RenameKotlinConstructor() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinClassConstructor/renameKotlinConstructor.test");
|
||||
|
||||
Reference in New Issue
Block a user