From 001d95f4b885a1a5a2eafcdbe31756df0e561088 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 23 Jan 2014 19:08:00 +0400 Subject: [PATCH] Forbid safe delete action if target element is a property setter parameter --- .../safeDelete/KotlinSafeDeleteProcessor.java | 7 +++++-- .../kotlinValueParameter/setter.kt | 13 +++++++++++++ .../kotlinValueParameter/setter.kt.after | 13 +++++++++++++ .../jet/safeDelete/JetSafeDeleteTestGenerated.java | 5 +++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt create mode 100644 idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt.after 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 d85e219fb94..22ca070e2d2 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java @@ -59,12 +59,15 @@ import java.util.*; public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { public static boolean canDeleteElement(@NotNull PsiElement element) { if (PsiUtilPackage.isObjectLiteral(element)) return false; + if (element instanceof JetParameter) { + JetDeclaration declaration = PsiTreeUtil.getParentOfType(element, JetDeclaration.class); + return declaration != null && !(declaration instanceof JetPropertyAccessor && ((JetPropertyAccessor) declaration).isSetter()); + } return element instanceof JetClassOrObject || element instanceof JetNamedFunction || element instanceof PsiMethod || element instanceof JetProperty - || element instanceof JetTypeParameter - || element instanceof JetParameter; + || element instanceof JetTypeParameter; } @Override diff --git a/idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt b/idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt new file mode 100644 index 00000000000..047cd32fd0c --- /dev/null +++ b/idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt @@ -0,0 +1,13 @@ +class A { + var foo: String + get() = "foo" + set(value: String) { + println() + } +} + +class B { + fun bar(a: A) { + a.foo = "bar" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt.after b/idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt.after new file mode 100644 index 00000000000..b709ea2e5e6 --- /dev/null +++ b/idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt.after @@ -0,0 +1,13 @@ +class A { + var foo: String + get() = "foo" + set(value: String) { + println() + } +} + +class B { + fun bar(a: A) { + a.foo = "bar" + } +} \ 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 fbe3aafe78e..07fc17862a9 100644 --- a/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java @@ -823,6 +823,11 @@ public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest { doValueParameterTest("idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/safeUsagesExt2.kt"); } + @TestMetadata("setter.kt") + public void testSetter() throws Exception { + doValueParameterTest("idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter/setter.kt"); + } + } @TestMetadata("idea/testData/safeDelete/deleteValueParameter/kotlinValueParameterWithJava")