KT-3255 Add ability to rename kotlin classes from java
#KT-3255 Fixed
This commit is contained in:
committed by
Nikolay Krasko
parent
87fac21310
commit
76562f9aa5
+2
-2
@@ -129,7 +129,7 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiElement copy() {
|
||||
return new KotlinLightClassForExplicitDeclaration(getManager(), classFqName, classOrObject);
|
||||
return new KotlinLightClassForExplicitDeclaration(getManager(), classFqName, (JetClassOrObject) classOrObject.copy());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -394,7 +394,7 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
|
||||
@Override
|
||||
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
||||
return super.setName(name); // TODO
|
||||
throw new IncorrectOperationException("Cannot modify compiled kotlin element");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -213,7 +213,9 @@
|
||||
<psi.referenceContributor language="jet" order="after JetCompletionContributor"
|
||||
implementation="org.jetbrains.jet.plugin.references.JetReferenceContributor"/>
|
||||
|
||||
<renamePsiElementProcessor implementation="org.jetbrains.jet.plugin.refactoring.rename.RenameJetClassProcessor"/>
|
||||
<renamePsiElementProcessor id="KotlinClass"
|
||||
implementation="org.jetbrains.jet.plugin.refactoring.rename.RenameJetClassProcessor"
|
||||
order="first"/>
|
||||
<renamePsiElementProcessor implementation="org.jetbrains.jet.plugin.refactoring.rename.RenameKotlinFunctionProcessor"/>
|
||||
|
||||
<liveTemplateContext implementation="org.jetbrains.jet.plugin.liveTemplates.JetTemplateContextType$Generic"/>
|
||||
|
||||
@@ -16,10 +16,15 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.refactoring.rename;
|
||||
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.rename.RenamePsiElementProcessor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.asJava.KotlinLightClass;
|
||||
import org.jetbrains.jet.asJava.KotlinLightClassForExplicitDeclaration;
|
||||
import org.jetbrains.jet.asJava.KotlinLightClassForPackage;
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
|
||||
@@ -28,7 +33,26 @@ import java.util.Map;
|
||||
public class RenameJetClassProcessor extends RenamePsiElementProcessor {
|
||||
@Override
|
||||
public boolean canProcessElement(@NotNull PsiElement element) {
|
||||
return element instanceof JetClassOrObject;
|
||||
return element instanceof JetClassOrObject || element instanceof KotlinLightClass;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiElement substituteElementToRename(PsiElement element, @Nullable Editor editor) {
|
||||
if (element instanceof KotlinLightClass) {
|
||||
if (element instanceof KotlinLightClassForExplicitDeclaration) {
|
||||
return element.getNavigationElement();
|
||||
}
|
||||
else if (element instanceof KotlinLightClassForPackage) {
|
||||
// Cancel rename
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
assert false : "Should not be suggested to rename element of type " + element.getClass() + " " + element;
|
||||
}
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,6 +67,7 @@ public class RenameJetClassProcessor extends RenamePsiElementProcessor {
|
||||
allRenames.put(file, newName + "." + virtualFile.getExtension());
|
||||
}
|
||||
}
|
||||
|
||||
super.prepareRenaming(element, newName, allRenames);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
// RENAME: JAVA_CLASS->testing.rename.First->Third
|
||||
@@ -33,9 +33,7 @@ import org.jetbrains.jet.plugin.refactoring.rename.AbstractRenameTest;
|
||||
@TestMetadata("idea/testData/refactoring/rename")
|
||||
public class RenameTestGenerated extends AbstractRenameTest {
|
||||
public void testAllFilesPresentInRename() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests",
|
||||
new File("idea/testData/refactoring/rename"),
|
||||
Pattern.compile("^(.+)\\.test$"));
|
||||
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/refactoring/rename"), Pattern.compile("^(.+)\\.test$"));
|
||||
}
|
||||
|
||||
@TestMetadata("renameJavaClass/renameJavaClass.test")
|
||||
@@ -43,6 +41,11 @@ public class RenameTestGenerated extends AbstractRenameTest {
|
||||
doTest("idea/testData/refactoring/rename/renameJavaClass/renameJavaClass.test");
|
||||
}
|
||||
|
||||
@TestMetadata("renameKotlinClass/javaWrapperForKotlinClass.test")
|
||||
public void testRenameKotlinClass_JavaWrapperForKotlinClass() throws Exception {
|
||||
doTest("idea/testData/refactoring/rename/renameKotlinClass/javaWrapperForKotlinClass.test");
|
||||
}
|
||||
|
||||
@TestMetadata("renameKotlinClass/kotlinClass.test")
|
||||
public void testRenameKotlinClass_KotlinClass() throws Exception {
|
||||
doTest("idea/testData/refactoring/rename/renameKotlinClass/kotlinClass.test");
|
||||
|
||||
Reference in New Issue
Block a user