From 613a274c9029c05e4ac29dc419bb1d9eec5e449e Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 20 Apr 2016 11:44:06 +0300 Subject: [PATCH] Safe Delete: Fixed usages search when applied to simple enum entries #KT-11816 Fixed --- ChangeLog.md | 1 + .../src/org/jetbrains/kotlin/asJava/LightClassUtil.kt | 2 +- .../refactoring/safeDelete/KotlinSafeDeleteProcessor.kt | 4 ++++ .../safeDelete/deleteClass/kotlinClass/enumEntry.kt | 5 +++++ .../deleteClass/kotlinClass/enumEntry.kt.messages | 1 + .../refactoring/safeDelete/SafeDeleteTestGenerated.java | 6 ++++++ 6 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt create mode 100644 idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt.messages diff --git a/ChangeLog.md b/ChangeLog.md index 967b05d74e3..af3aa9f93f7 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -34,6 +34,7 @@ Issues fixed: - [KT-8817](https://youtrack.jetbrains.com/issue/KT-8817) Fixed rename of Java getters/setters through synthetic property references in Kotlin - [KT-11617](https://youtrack.jetbrains.com/issue/KT-11617) Fixed title of Introduce Parameter declaration chooser - [KT-11817](https://youtrack.jetbrains.com/issue/KT-11817) Fixed rename of Kotlin enum constants through Java references +- [KT-11816](https://youtrack.jetbrains.com/issue/KT-11816) Fixed usages search for Safe Delete on simple enum entries #### Debugger diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt index e299b1da2b1..63aa54960e0 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt @@ -80,7 +80,7 @@ object LightClassUtil { return extractPropertyAccessors(property, getterWrapper, setterWrapper) } - private fun getLightClassBackingField(declaration: KtDeclaration): PsiField? { + fun getLightClassBackingField(declaration: KtDeclaration): PsiField? { var psiClass: PsiClass = getWrappingClass(declaration) ?: return null if (psiClass is KtLightClass) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index e918cf9d016..4ee3140aa47 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -185,6 +185,10 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { return when (element) { is KtClassOrObject -> { + if (element is KtEnumEntry) { + LightClassUtil.getLightClassBackingField(element)?.let { findUsagesByJavaProcessor(it, false) } + } + element.toLightClass()?.let { klass -> findDelegationCallUsages(klass) findUsagesByJavaProcessor(klass, false) diff --git a/idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt b/idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt new file mode 100644 index 00000000000..505fad45c75 --- /dev/null +++ b/idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt @@ -0,0 +1,5 @@ +enum class EnumTarget { RED, GREEN, BLUE } + +fun refer(p: EnumTarget) { + println(p == EnumTarget.RED) +} \ No newline at end of file diff --git a/idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt.messages b/idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt.messages new file mode 100644 index 00000000000..a0e0e3d9c8f --- /dev/null +++ b/idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt.messages @@ -0,0 +1 @@ +class EnumTarget.RED has 1 usage that is not safe to delete. \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTestGenerated.java index e6a000d7194..c8958a297f7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTestGenerated.java @@ -67,6 +67,12 @@ public class SafeDeleteTestGenerated extends AbstractSafeDeleteTest { doClassTest(fileName); } + @TestMetadata("enumEntry.kt") + public void testEnumEntry() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/enumEntry.kt"); + doClassTest(fileName); + } + @TestMetadata("localClass1.kt") public void testLocalClass1() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/safeDelete/deleteClass/kotlinClass/localClass1.kt");