ensure that a JetEnumEntry is equivalent to a KotlinLightEnumConstant

#KT-5057 Fixed
This commit is contained in:
Dmitry Jemerov
2015-07-29 21:21:13 +02:00
parent 194aa57c07
commit 23dca520d5
8 changed files with 55 additions and 1 deletions
@@ -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()
@@ -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, D> R accept(@NotNull JetVisitor<R, D> 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);
}
}
@@ -0,0 +1,5 @@
package testing
enum class E {
BAR
}
@@ -0,0 +1,5 @@
package testing;
class JavaClient {
E e = E.BAR;
}
@@ -0,0 +1,5 @@
package testing
enum class E {
FOO
}
@@ -0,0 +1,5 @@
package testing;
class JavaClient {
E e = E.FOO;
}
@@ -0,0 +1,5 @@
{
"type": "KOTLIN_CLASS",
"classId": "testing/E.FOO",
"newName": "BAR"
}
@@ -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");