diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt index e80c13d7201..3475e964fea 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/psiUtil/jetPsiUtil.kt @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.psi.JetClassBody import org.jetbrains.jet.lang.psi.JetParameterList import org.jetbrains.jet.lang.psi.JetNamedDeclaration import com.intellij.psi.PsiNamedElement +import org.jetbrains.jet.lang.psi.JetObjectDeclaration fun PsiElement.getParentByTypesAndPredicate( strict : Boolean = false, vararg parentClasses : Class, predicate: (T) -> Boolean @@ -175,4 +176,6 @@ fun JetDeclaration.isOverridable(): Boolean { } val PsiElement.namedNavigationElement: PsiNamedElement? - get() = getNavigationElement()?.getParentByType(javaClass()) \ No newline at end of file + get() = getNavigationElement()?.getParentByType(javaClass()) + +fun PsiElement.isObjectLiteral(): Boolean = this is JetObjectDeclaration && isObjectLiteral() \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java index b8bd4ccd30a..c23ddaa0e20 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java @@ -46,6 +46,7 @@ import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.Modality; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.psi.psiUtil.PsiUtilPackage; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightMethod; @@ -58,6 +59,7 @@ import java.util.*; public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { public static boolean canDeleteElement(@NotNull PsiElement element) { + if (PsiUtilPackage.isObjectLiteral(element)) return false; return element instanceof JetClassOrObject || element instanceof JetNamedFunction || element instanceof PsiMethod diff --git a/idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt b/idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt new file mode 100644 index 00000000000..35918ecd1f5 --- /dev/null +++ b/idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt @@ -0,0 +1,7 @@ +trait A + +fun foo(): A { + return object: A { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt.after b/idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt.after new file mode 100644 index 00000000000..9005f2d3de1 --- /dev/null +++ b/idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt.after @@ -0,0 +1,7 @@ +trait A + +fun foo(): A { + return object: A { + + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java b/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java index 9f376619030..d6ecc2e0a05 100644 --- a/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java @@ -101,6 +101,11 @@ public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/safeDelete/deleteObject/kotlinObject"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("anonymousObject.kt") + public void testAnonymousObject() throws Exception { + doObjectTest("idea/testData/safeDelete/deleteObject/kotlinObject/anonymousObject.kt"); + } + @TestMetadata("localObject1.kt") public void testLocalObject1() throws Exception { doObjectTest("idea/testData/safeDelete/deleteObject/kotlinObject/localObject1.kt");