KT-3255 Add ability to rename kotlin classes from java

#KT-3255 Fixed
This commit is contained in:
Nikolay Krasko
2013-11-17 00:44:23 -08:00
committed by Nikolay Krasko
parent 87fac21310
commit 76562f9aa5
5 changed files with 38 additions and 7 deletions
@@ -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
+3 -1
View File
@@ -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");