diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java
index 0b91e3176c0..5c4715c7f74 100644
--- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java
+++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java
@@ -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
diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml
index 160cb5d3ad2..3a7073cdcc5 100644
--- a/idea/src/META-INF/plugin.xml
+++ b/idea/src/META-INF/plugin.xml
@@ -213,7 +213,9 @@
-
+
diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameJetClassProcessor.java b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameJetClassProcessor.java
index 8324133fcb3..5365545c10d 100644
--- a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameJetClassProcessor.java
+++ b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameJetClassProcessor.java
@@ -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);
}
}
diff --git a/idea/testData/refactoring/rename/renameKotlinClass/javaWrapperForKotlinClass.test b/idea/testData/refactoring/rename/renameKotlinClass/javaWrapperForKotlinClass.test
new file mode 100644
index 00000000000..ba92cec85a8
--- /dev/null
+++ b/idea/testData/refactoring/rename/renameKotlinClass/javaWrapperForKotlinClass.test
@@ -0,0 +1 @@
+// RENAME: JAVA_CLASS->testing.rename.First->Third
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java
index abef1646c1e..1bab7c5286e 100644
--- a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java
@@ -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");