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
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public PsiElement copy() {
|
public PsiElement copy() {
|
||||||
return new KotlinLightClassForExplicitDeclaration(getManager(), classFqName, classOrObject);
|
return new KotlinLightClassForExplicitDeclaration(getManager(), classFqName, (JetClassOrObject) classOrObject.copy());
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -394,7 +394,7 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
||||||
return super.setName(name); // TODO
|
throw new IncorrectOperationException("Cannot modify compiled kotlin element");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -213,7 +213,9 @@
|
|||||||
<psi.referenceContributor language="jet" order="after JetCompletionContributor"
|
<psi.referenceContributor language="jet" order="after JetCompletionContributor"
|
||||||
implementation="org.jetbrains.jet.plugin.references.JetReferenceContributor"/>
|
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"/>
|
<renamePsiElementProcessor implementation="org.jetbrains.jet.plugin.refactoring.rename.RenameKotlinFunctionProcessor"/>
|
||||||
|
|
||||||
<liveTemplateContext implementation="org.jetbrains.jet.plugin.liveTemplates.JetTemplateContextType$Generic"/>
|
<liveTemplateContext implementation="org.jetbrains.jet.plugin.liveTemplates.JetTemplateContextType$Generic"/>
|
||||||
|
|||||||
@@ -16,10 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.refactoring.rename;
|
package org.jetbrains.jet.plugin.refactoring.rename;
|
||||||
|
|
||||||
|
import com.intellij.openapi.editor.Editor;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.refactoring.rename.RenamePsiElementProcessor;
|
import com.intellij.refactoring.rename.RenamePsiElementProcessor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.JetClassOrObject;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
|
|
||||||
@@ -28,7 +33,26 @@ import java.util.Map;
|
|||||||
public class RenameJetClassProcessor extends RenamePsiElementProcessor {
|
public class RenameJetClassProcessor extends RenamePsiElementProcessor {
|
||||||
@Override
|
@Override
|
||||||
public boolean canProcessElement(@NotNull PsiElement element) {
|
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
|
@Override
|
||||||
@@ -43,6 +67,7 @@ public class RenameJetClassProcessor extends RenamePsiElementProcessor {
|
|||||||
allRenames.put(file, newName + "." + virtualFile.getExtension());
|
allRenames.put(file, newName + "." + virtualFile.getExtension());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.prepareRenaming(element, newName, allRenames);
|
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")
|
@TestMetadata("idea/testData/refactoring/rename")
|
||||||
public class RenameTestGenerated extends AbstractRenameTest {
|
public class RenameTestGenerated extends AbstractRenameTest {
|
||||||
public void testAllFilesPresentInRename() throws Exception {
|
public void testAllFilesPresentInRename() throws Exception {
|
||||||
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests",
|
JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/refactoring/rename"), Pattern.compile("^(.+)\\.test$"));
|
||||||
new File("idea/testData/refactoring/rename"),
|
|
||||||
Pattern.compile("^(.+)\\.test$"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("renameJavaClass/renameJavaClass.test")
|
@TestMetadata("renameJavaClass/renameJavaClass.test")
|
||||||
@@ -43,6 +41,11 @@ public class RenameTestGenerated extends AbstractRenameTest {
|
|||||||
doTest("idea/testData/refactoring/rename/renameJavaClass/renameJavaClass.test");
|
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")
|
@TestMetadata("renameKotlinClass/kotlinClass.test")
|
||||||
public void testRenameKotlinClass_KotlinClass() throws Exception {
|
public void testRenameKotlinClass_KotlinClass() throws Exception {
|
||||||
doTest("idea/testData/refactoring/rename/renameKotlinClass/kotlinClass.test");
|
doTest("idea/testData/refactoring/rename/renameKotlinClass/kotlinClass.test");
|
||||||
|
|||||||
Reference in New Issue
Block a user