From 23dca520d5a3113923680138b23edbd00d724a28 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 29 Jul 2015 21:21:13 +0200 Subject: [PATCH] ensure that a JetEnumEntry is equivalent to a KotlinLightEnumConstant #KT-5057 Fixed --- .../src/org/jetbrains/kotlin/psi/JetClass.kt | 2 +- .../jetbrains/kotlin/psi/JetEnumEntry.java | 23 +++++++++++++++++++ .../after/RenameKotlinEnumEntry.kt | 5 ++++ .../after/testing/JavaClient.java | 5 ++++ .../before/RenameKotlinEnumEntry.kt | 5 ++++ .../before/testing/JavaClient.java | 5 ++++ .../renameKotlinEnumEntry.test | 5 ++++ .../rename/RenameTestGenerated.java | 6 +++++ 8 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumEntry/after/RenameKotlinEnumEntry.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumEntry/after/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumEntry/before/RenameKotlinEnumEntry.kt create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumEntry/before/testing/JavaClient.java create mode 100644 idea/testData/refactoring/rename/renameKotlinEnumEntry/renameKotlinEnumEntry.test diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt index 3328e6c389b..cab34c13550 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetClass.kt @@ -79,7 +79,7 @@ public open class JetClass : JetClassOrObject { return false } - private fun getQualifiedName(): String? { + protected fun getQualifiedName(): String? { val stub = getStub() if (stub != null) { val fqName = stub.getFqName() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetEnumEntry.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetEnumEntry.java index bb73db63dd1..fa0cfaf7171 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetEnumEntry.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetEnumEntry.java @@ -17,11 +17,16 @@ package org.jetbrains.kotlin.psi; import com.intellij.lang.ASTNode; +import com.intellij.openapi.util.Comparing; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiEnumConstant; +import com.intellij.psi.PsiField; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.psi.stubs.KotlinClassStub; import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes; @@ -79,4 +84,22 @@ public class JetEnumEntry extends JetClass { public R accept(@NotNull JetVisitor visitor, D data) { return visitor.visitEnumEntry(this, data); } + + @Override + public boolean isEquivalentTo(@Nullable PsiElement another) { + if (another instanceof PsiEnumConstant) { + PsiEnumConstant enumConstant = (PsiEnumConstant) another; + PsiClass containingClass = enumConstant.getContainingClass(); + if (containingClass != null) { + String containingClassQName = containingClass.getQualifiedName(); + if (containingClassQName != null && enumConstant.getName() != null) { + String theirFQName = containingClassQName + "." + enumConstant.getName(); + if (theirFQName.equals(getQualifiedName())) { + return true; + } + } + } + } + return super.isEquivalentTo(another); + } } diff --git a/idea/testData/refactoring/rename/renameKotlinEnumEntry/after/RenameKotlinEnumEntry.kt b/idea/testData/refactoring/rename/renameKotlinEnumEntry/after/RenameKotlinEnumEntry.kt new file mode 100644 index 00000000000..1a5d74d69c8 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumEntry/after/RenameKotlinEnumEntry.kt @@ -0,0 +1,5 @@ +package testing + +enum class E { + BAR +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumEntry/after/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinEnumEntry/after/testing/JavaClient.java new file mode 100644 index 00000000000..59477346a34 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumEntry/after/testing/JavaClient.java @@ -0,0 +1,5 @@ +package testing; + +class JavaClient { + E e = E.BAR; +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumEntry/before/RenameKotlinEnumEntry.kt b/idea/testData/refactoring/rename/renameKotlinEnumEntry/before/RenameKotlinEnumEntry.kt new file mode 100644 index 00000000000..e32b1777982 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumEntry/before/RenameKotlinEnumEntry.kt @@ -0,0 +1,5 @@ +package testing + +enum class E { + FOO +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumEntry/before/testing/JavaClient.java b/idea/testData/refactoring/rename/renameKotlinEnumEntry/before/testing/JavaClient.java new file mode 100644 index 00000000000..4b0b1eb2c16 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumEntry/before/testing/JavaClient.java @@ -0,0 +1,5 @@ +package testing; + +class JavaClient { + E e = E.FOO; +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinEnumEntry/renameKotlinEnumEntry.test b/idea/testData/refactoring/rename/renameKotlinEnumEntry/renameKotlinEnumEntry.test new file mode 100644 index 00000000000..21b09f3b8e1 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinEnumEntry/renameKotlinEnumEntry.test @@ -0,0 +1,5 @@ +{ + "type": "KOTLIN_CLASS", + "classId": "testing/E.FOO", + "newName": "BAR" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 05d62c0d780..73cd88ee997 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -257,6 +257,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameKotlinEnumEntry/renameKotlinEnumEntry.test") + public void testRenameKotlinEnumEntry_RenameKotlinEnumEntry() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinEnumEntry/renameKotlinEnumEntry.test"); + doTest(fileName); + } + @TestMetadata("renameKotlinFunctionInEnum/renameKotlinFunctionInEnum.test") public void testRenameKotlinFunctionInEnum_RenameKotlinFunctionInEnum() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinFunctionInEnum/renameKotlinFunctionInEnum.test");