From c2944181bea9ccd9ea5a5c2b325babeae96d01b9 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 27 Apr 2015 18:37:43 +0200 Subject: [PATCH] fix JetPsiUtil.deleteClass() so that it no longer tries to delete the entire file when deleting a nested class or object #KT-7483 Fixed --- .../frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java | 3 +-- .../safeDelete/deleteObject/kotlinObject/companionObject.kt | 6 ++++++ .../deleteObject/kotlinObject/companionObject.kt.after | 4 ++++ .../kotlin/safeDelete/JetSafeDeleteTestGenerated.java | 6 ++++++ 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt create mode 100644 idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt.after diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java index 48a330eb619..706534c8e5a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java @@ -20,7 +20,6 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.intellij.lang.ASTNode; -import com.intellij.openapi.util.Condition; import com.intellij.psi.PsiComment; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -289,7 +288,7 @@ public class JetPsiUtil { public static void deleteClass(@NotNull JetClassOrObject clazz) { CheckUtil.checkWritable(clazz); JetFile file = clazz.getContainingJetFile(); - if (clazz.isLocal() || file.getDeclarations().size() > 1) { + if (!clazz.isTopLevel() || file.getDeclarations().size() > 1) { PsiElement parent = clazz.getParent(); CodeEditUtil.removeChild(parent.getNode(), clazz.getNode()); } diff --git a/idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt b/idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt new file mode 100644 index 00000000000..d9c7e92890a --- /dev/null +++ b/idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt @@ -0,0 +1,6 @@ + +class A { + fun foo(): Int = 0 + + companion object {} +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt.after b/idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt.after new file mode 100644 index 00000000000..c3fe09baa89 --- /dev/null +++ b/idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt.after @@ -0,0 +1,4 @@ +class A { + fun foo(): Int = 0 + +} \ 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 c0b6aeab754..62d84c73bb4 100644 --- a/idea/tests/org/jetbrains/kotlin/safeDelete/JetSafeDeleteTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/safeDelete/JetSafeDeleteTestGenerated.java @@ -133,6 +133,12 @@ public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest { doObjectTest(fileName); } + @TestMetadata("companionObject.kt") + public void testCompanionObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/safeDelete/deleteObject/kotlinObject/companionObject.kt"); + doObjectTest(fileName); + } + @TestMetadata("localObject1.kt") public void testLocalObject1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/safeDelete/deleteObject/kotlinObject/localObject1.kt");