From 24ba5a46f1cd623c1c38d96eb67d09a61c45c75a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 21 Aug 2015 16:29:28 +0200 Subject: [PATCH] use correct safe delete processor for members of local classes and objects #KT-8894 Fixed --- .../src/org/jetbrains/kotlin/asJava/LightClassUtil.java | 8 ++++++-- .../refactoring/safeDelete/KotlinSafeDeleteProcessor.kt | 4 ++-- .../kotlinProperty/propertyInLocalObject.kt | 7 +++++++ .../kotlinProperty/propertyInLocalObject.kt.messages | 1 + .../kotlin/safeDelete/JetSafeDeleteTestGenerated.java | 6 ++++++ 5 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt.messages diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.java index a20d1b07061..7c2a381a608 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.java @@ -251,8 +251,7 @@ public class LightClassUtil { return getPsiClass(((JetConstructor) declaration).getContainingClassOrObject()); } - //noinspection unchecked - if (PsiTreeUtil.getParentOfType(declaration, JetFunction.class, JetProperty.class) != null) { + if (!canGenerateLightClass(declaration)) { // Can't get wrappers for internal declarations. Their classes are not generated during calcStub // with ClassBuilderMode.LIGHT_CLASSES mode, and this produces "Class not found exception" in getDelegate() return null; @@ -274,6 +273,11 @@ public class LightClassUtil { return null; } + public static boolean canGenerateLightClass(JetDeclaration declaration) { + //noinspection unchecked + return PsiTreeUtil.getParentOfType(declaration, JetFunction.class, JetProperty.class) == null; + } + @NotNull private static PropertyAccessorsPsiMethods extractPropertyAccessors( @NotNull JetDeclaration jetDeclaration, 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 353ca03fa28..24511b4413d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -192,7 +192,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is JetNamedFunction -> { - if (element.isLocal()) { + if (!LightClassUtil.canGenerateLightClass(element)) { findKotlinDeclarationUsages(element) } else { @@ -204,7 +204,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { findUsagesByJavaProcessor(element, false) is JetProperty -> { - if (element.isLocal()) { + if (!LightClassUtil.canGenerateLightClass(element)) { findKotlinDeclarationUsages(element) } else { diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt b/idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt new file mode 100644 index 00000000000..614729affaa --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt @@ -0,0 +1,7 @@ +open class SampleParent { var field = 0 } + +fun context() { + var v = object : SampleParent() { var addition = 0 } + println(v.field) + println(v.addition) +} diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt.messages b/idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt.messages new file mode 100644 index 00000000000..2d77a2bf313 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt.messages @@ -0,0 +1 @@ +property context.<no name provided>.addition has 1 usage that is not safe to delete. \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/safeDelete/JetSafeDeleteTestGenerated.java b/idea/tests/org/jetbrains/kotlin/safeDelete/JetSafeDeleteTestGenerated.java index 62d84c73bb4..34cc2a8d370 100644 --- a/idea/tests/org/jetbrains/kotlin/safeDelete/JetSafeDeleteTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/safeDelete/JetSafeDeleteTestGenerated.java @@ -534,6 +534,12 @@ public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyExt2.kt"); doPropertyTest(fileName); } + + @TestMetadata("propertyInLocalObject.kt") + public void testPropertyInLocalObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/safeDelete/deleteProperty/kotlinProperty/propertyInLocalObject.kt"); + doPropertyTest(fileName); + } } @TestMetadata("idea/testData/safeDelete/deleteProperty/kotlinPropertyWithJava")