Forbid "safe delete" for anonymous objects
This commit is contained in:
@@ -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<T: PsiElement>(
|
||||
strict : Boolean = false, vararg parentClasses : Class<T>, predicate: (T) -> Boolean
|
||||
@@ -175,4 +176,6 @@ fun JetDeclaration.isOverridable(): Boolean {
|
||||
}
|
||||
|
||||
val PsiElement.namedNavigationElement: PsiNamedElement?
|
||||
get() = getNavigationElement()?.getParentByType(javaClass<PsiNamedElement>())
|
||||
get() = getNavigationElement()?.getParentByType(javaClass<PsiNamedElement>())
|
||||
|
||||
fun PsiElement.isObjectLiteral(): Boolean = this is JetObjectDeclaration && isObjectLiteral()
|
||||
+2
@@ -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
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
trait A
|
||||
|
||||
fun foo(): A {
|
||||
return <caret>object: A {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
trait A
|
||||
|
||||
fun foo(): A {
|
||||
return object: A {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user