From 639336b2f5d0861e9658d8288632ece13d313ca6 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 19 Jul 2013 19:01:34 +0400 Subject: [PATCH] Implement "Safe Delete" refactoring for properties --- .../jetbrains/jet/lang/psi/JetPsiUtil.java | 7 + .../jet/generators/tests/GenerateTests.java | 19 +- .../jetbrains/jet/plugin/JetBundle.properties | 5 +- .../KotlinOverridingMethodsDialog.java | 34 ++- ... KotlinSafeDeleteOverridingUsageInfo.java} | 23 +- .../safeDelete/KotlinSafeDeleteProcessor.java | 189 +++++++++++---- .../deleteJavaProperty/middleJava1.java | 6 + .../deleteJavaProperty/middleJava1.java.after | 2 + .../deleteJavaProperty/middleJava1.kt | 10 + .../deleteJavaProperty/middleJava1.kt.after | 10 + .../deleteJavaProperty/middleJava2.java | 6 + .../deleteJavaProperty/middleJava2.kt | 10 + .../middleJava2.kt.messages | 1 + .../deleteJavaProperty/middleJava3.java | 11 + .../deleteJavaProperty/middleJava3.java.after | 7 + .../deleteJavaProperty/middleJava3.kt | 13 + .../deleteJavaProperty/middleJava3.kt.after | 13 + .../deleteJavaProperty/middleJava4.java | 11 + .../deleteJavaProperty/middleJava4.kt | 13 + .../middleJava4.kt.messages | 1 + .../deleteJavaProperty/middleJava5.java | 11 + .../deleteJavaProperty/middleJava5.java.after | 7 + .../deleteJavaProperty/middleJava5.kt | 13 + .../deleteJavaProperty/middleJava5.kt.after | 13 + .../deleteJavaProperty/middleJava6.java | 11 + .../deleteJavaProperty/middleJava6.kt | 13 + .../middleJava6.kt.messages | 1 + .../safeDelete/deleteProperty/implement1.kt | 10 + .../deleteProperty/implement1.kt.messages | 1 + .../safeDelete/deleteProperty/implement2.kt | 14 ++ .../deleteProperty/implement2.kt.messages | 2 + .../safeDelete/deleteProperty/implement3.kt | 13 + .../deleteProperty/implement3.kt.messages | 1 + .../safeDelete/deleteProperty/implement4.kt | 17 ++ .../deleteProperty/implement4.kt.messages | 2 + .../kotlinProperty/implement5.kt | 10 + .../kotlinProperty/implement5.kt.after | 5 + .../kotlinProperty/implement6.kt | 13 + .../kotlinProperty/implement6.kt.after | 5 + .../kotlinProperty/implement7.kt | 14 ++ .../kotlinProperty/implement7.kt.after | 13 + .../kotlinProperty/implement8.kt | 17 ++ .../kotlinProperty/implement8.kt.after | 16 ++ .../safeDelete/deleteProperty/noUsages.kt | 9 + .../deleteProperty/noUsages.kt.after | 5 + .../safeDelete/deleteProperty/override1.kt | 13 + .../deleteProperty/override1.kt.after | 9 + .../safeDelete/deleteProperty/override2.kt | 13 + .../deleteProperty/override2.kt.after | 5 + .../safeDelete/deleteProperty/override3.kt | 19 ++ .../deleteProperty/override3.kt.after | 12 + .../safeDelete/deleteProperty/override4.kt | 19 ++ .../deleteProperty/override4.kt.after | 5 + .../deleteProperty/overrideAndImplement1.kt | 17 ++ .../overrideAndImplement1.kt.messages | 1 + .../deleteProperty/overrideAndImplement2.kt | 17 ++ .../overrideAndImplement2.kt.after | 13 + .../deleteProperty/overrideAndImplement3.kt | 23 ++ .../overrideAndImplement3.kt.messages | 1 + .../deleteProperty/overrideAndImplement4.kt | 23 ++ .../overrideAndImplement4.kt.after | 16 ++ .../deleteProperty/overrideWithUsages.kt | 17 ++ .../overrideWithUsages.kt.after | 13 + .../safeDelete/deleteProperty/property1.kt | 9 + .../deleteProperty/property1.kt.after | 5 + .../safeDelete/deleteProperty/property2.kt | 9 + .../deleteProperty/property2.kt.messages | 2 + .../implement1.java | 6 + .../implement1.java.after | 6 + .../implement1.kt | 7 + .../implement1.kt.after | 6 + .../implement2.java | 6 + .../implement2.java.after | 2 + .../implement2.kt | 3 + .../implement2.kt.after | 2 + .../implement3.java | 11 + .../implement3.java.after | 11 + .../implement3.kt | 7 + .../implement3.kt.after | 6 + .../implement4.java | 11 + .../implement4.java.after | 3 + .../implement4.kt | 3 + .../implement4.kt.after | 2 + .../override1.java | 10 + .../override1.java.after | 9 + .../deletePropertyWithJavaUsages/override1.kt | 3 + .../override1.kt.after | 2 + .../override2.java | 6 + .../override2.java.after | 2 + .../deletePropertyWithJavaUsages/override2.kt | 3 + .../override2.kt.after | 2 + .../override3.java | 16 ++ .../override3.java.after | 14 ++ .../deletePropertyWithJavaUsages/override3.kt | 3 + .../override3.kt.after | 2 + .../override4.java | 11 + .../override4.java.after | 3 + .../deletePropertyWithJavaUsages/override4.kt | 3 + .../override4.kt.after | 2 + .../overrideAndImplement1.java | 6 + .../overrideAndImplement1.java.after | 6 + .../overrideAndImplement1.kt | 7 + .../overrideAndImplement1.kt.after | 6 + .../overrideAndImplement2.java | 11 + .../overrideAndImplement2.java.after | 11 + .../overrideAndImplement2.kt | 7 + .../overrideAndImplement2.kt.after | 6 + .../safeDelete/AbstractJetSafeDeleteTest.java | 13 + .../JetSafeDeleteTestGenerated.java | 228 +++++++++++++++++- 109 files changed, 1287 insertions(+), 85 deletions(-) rename idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/{KotlinSafeDeleteOverridingMethodUsageInfo.java => KotlinSafeDeleteOverridingUsageInfo.java} (56%) create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava1.java create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava1.java.after create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt.after create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava2.java create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt.messages create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava3.java create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava3.java.after create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt.after create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava4.java create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt.messages create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava5.java create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava5.java.after create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt.after create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava6.java create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt create mode 100644 idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/implement1.kt create mode 100644 idea/testData/safeDelete/deleteProperty/implement1.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/implement2.kt create mode 100644 idea/testData/safeDelete/deleteProperty/implement2.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/implement3.kt create mode 100644 idea/testData/safeDelete/deleteProperty/implement3.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/implement4.kt create mode 100644 idea/testData/safeDelete/deleteProperty/implement4.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt create mode 100644 idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/noUsages.kt create mode 100644 idea/testData/safeDelete/deleteProperty/noUsages.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/override1.kt create mode 100644 idea/testData/safeDelete/deleteProperty/override1.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/override2.kt create mode 100644 idea/testData/safeDelete/deleteProperty/override2.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/override3.kt create mode 100644 idea/testData/safeDelete/deleteProperty/override3.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/override4.kt create mode 100644 idea/testData/safeDelete/deleteProperty/override4.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt.messages create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt create mode 100644 idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt create mode 100644 idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/property1.kt create mode 100644 idea/testData/safeDelete/deleteProperty/property1.kt.after create mode 100644 idea/testData/safeDelete/deleteProperty/property2.kt create mode 100644 idea/testData/safeDelete/deleteProperty/property2.kt.messages create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java.after create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt create mode 100644 idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt.after diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 0c159307445..de8fdf4a4bb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -910,4 +910,11 @@ public class JetPsiUtil { return (names.size() > partIndex) ? names.get(partIndex) : header.getLastPartExpression(); } + + public static PsiElement ascendIfPropertyAccessor(PsiElement element) { + if (element instanceof JetPropertyAccessor) { + return element.getParent(); + } + return element; + } } diff --git a/generators/org/jetbrains/jet/generators/tests/GenerateTests.java b/generators/org/jetbrains/jet/generators/tests/GenerateTests.java index fa3353c6228..6b7a8253b95 100644 --- a/generators/org/jetbrains/jet/generators/tests/GenerateTests.java +++ b/generators/org/jetbrains/jet/generators/tests/GenerateTests.java @@ -410,20 +410,23 @@ public class GenerateTests { "idea/tests/", "JetSafeDeleteTestGenerated", AbstractJetSafeDeleteTest.class, - testModel("idea/testData/safeDelete/deleteClass", "doClassTest"), - testModel("idea/testData/safeDelete/deleteObject", "doObjectTest"), - testModel("idea/testData/safeDelete/deleteFunction", "doFunctionTest"), - testModel("idea/testData/safeDelete/deleteFunctionWithJavaUsages", "doFunctionTestWithJava") - // TODO fix -- disabled because doesn't work in Idea 130.1335 - // testModel("idea/testData/safeDelete/deleteJavaMethod", "doJavaMethodTest") + testModel("idea/testData/safeDelete/deleteClass/kotlinClass", "doClassTest"), + testModel("idea/testData/safeDelete/deleteObject/kotlinObject", "doObjectTest"), + testModel("idea/testData/safeDelete/deleteFunction/kotlinFunction", "doFunctionTest"), + testModel("idea/testData/safeDelete/deleteFunction/kotlinFunctionWithJava", "doFunctionTestWithJava"), + testModel("idea/testData/safeDelete/deleteFunction/javaFunctionWithKotlin", "doJavaMethodTest"), + testModel("idea/testData/safeDelete/deleteProperty/kotlinProperty", "doPropertyTest"), + testModel("idea/testData/safeDelete/deleteProperty/kotlinPropertyWithJava", "doPropertyTestWithJava"), + testModel("idea/testData/safeDelete/deleteProperty/javaPropertyWithKotlin", "doJavaPropertyTest"), + testModel("idea/testData/safeDelete/deleteTypeParameter/kotlinTypeParameter", "doTypeParameterTest"), + testModel("idea/testData/safeDelete/deleteValueParameter/kotlinValueParameter", "doValueParameterTest") ); generateTest( "idea/tests/", "ReferenceResolveTestGenerated", AbstractResolveBaseTest.class, - testModel("idea/testData/resolve/references", "doTest") - ); + testModel("idea/testData/resolve/references", "doTest") ); } private static SimpleTestClassModel testModel(@NotNull String rootPath) { diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index b2d2d9f78db..3bb8c7b1f74 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -258,4 +258,7 @@ usageType.selector = Selector x.in.y={0} in {1} x.implements.y={0} in {1} implements {2} in {3}. x.overrides.y.in.class.list={0} in {1} overrides functions in the following classes/traits: {2} Do you want to delete (with usage search) the base methods? -unused.overriding.methods.title=Unused Overriding Methods \ No newline at end of file +unused.overriding.methods.title=Unused Overriding Members +there.are.unused.methods.that.override.methods.you.delete=There are unused members that override methods you delete. +choose.the.ones.you.want.to.be.deleted=Choose the ones you want to be deleted. +method.column=Member \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingMethodsDialog.java b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingMethodsDialog.java index f8016dbafce..9321d0fa5ab 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingMethodsDialog.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingMethodsDialog.java @@ -22,22 +22,20 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Disposer; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.refactoring.HelpID; -import com.intellij.refactoring.RefactoringBundle; import com.intellij.ui.BooleanTableCellRenderer; import com.intellij.ui.ScrollPaneFactory; +import com.intellij.ui.table.JBTable; import com.intellij.usageView.UsageInfo; import com.intellij.usages.impl.UsagePreviewPanel; -import com.intellij.ui.table.JBTable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; -import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.java.JetClsMethod; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -78,22 +76,21 @@ class KotlinOverridingMethodsDialog extends DialogWrapper { myMethodText = new String[myOverridingMethods.size()]; for (int i = 0; i < myMethodText.length; i++) { - myMethodText[i] = formatMethod(((KotlinSafeDeleteOverridingMethodUsageInfo) myOverridingMethods.get(i)).getOverridingMethod()); + myMethodText[i] = formatElement(((KotlinSafeDeleteOverridingUsageInfo) myOverridingMethods.get(i)).getOverridingElement()); } myUsagePreviewPanel = new UsagePreviewPanel(project); setTitle(JetBundle.message("unused.overriding.methods.title")); init(); } - private static String formatMethod(PsiMethod method) { - if (method instanceof JetClsMethod) { - JetNamedFunction function = (JetNamedFunction) ((JetClsMethod) method).getOrigin(); - + private static String formatElement(PsiElement element) { + element = JetPsiUtil.ascendIfPropertyAccessor(element); + if (element instanceof JetNamedFunction || element instanceof JetProperty) { BindingContext bindingContext = - AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) function.getContainingFile()).getBindingContext(); + AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) element.getContainingFile()).getBindingContext(); - DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, function); - if (declarationDescriptor instanceof FunctionDescriptor) { + DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element); + if (declarationDescriptor instanceof CallableMemberDescriptor) { DeclarationDescriptor containingDescriptor = declarationDescriptor.getContainingDeclaration(); if (containingDescriptor instanceof ClassDescriptor) { return JetBundle.message( @@ -105,7 +102,8 @@ class KotlinOverridingMethodsDialog extends DialogWrapper { } } - return KotlinSafeDeleteProcessor.formatPsiMethod(method, true, false); + assert element instanceof PsiMethod; + return KotlinSafeDeleteProcessor.formatPsiMethod((PsiMethod) element, true, false); } @Override @@ -138,8 +136,8 @@ class KotlinOverridingMethodsDialog extends DialogWrapper { protected JComponent createNorthPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - panel.add(new JLabel(RefactoringBundle.message("there.are.unused.methods.that.override.methods.you.delete"))); - panel.add(new JLabel(RefactoringBundle.message("choose.the.ones.you.want.to.be.deleted"))); + panel.add(new JLabel(JetBundle.message("there.are.unused.methods.that.override.methods.you.delete"))); + panel.add(new JLabel(JetBundle.message("choose.the.ones.you.want.to.be.deleted"))); return panel; } @@ -245,7 +243,7 @@ class KotlinOverridingMethodsDialog extends DialogWrapper { case CHECK_COLUMN: return " "; default: - return RefactoringBundle.message("method.column"); + return JetBundle.message("method.column"); } } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteOverridingMethodUsageInfo.java b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteOverridingUsageInfo.java similarity index 56% rename from idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteOverridingMethodUsageInfo.java rename to idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteOverridingUsageInfo.java index 77e48b30ca6..a1d60b4b4cc 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteOverridingMethodUsageInfo.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteOverridingUsageInfo.java @@ -17,32 +17,23 @@ package org.jetbrains.jet.plugin.refactoring.safeDelete; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; import com.intellij.refactoring.safeDelete.usageInfo.SafeDeleteCustomUsageInfo; import com.intellij.refactoring.safeDelete.usageInfo.SafeDeleteUsageInfo; import com.intellij.util.IncorrectOperationException; -import org.jetbrains.jet.asJava.LightClassUtil; -import org.jetbrains.jet.lang.psi.JetNamedFunction; +import org.jetbrains.jet.lang.psi.JetPsiUtil; -public class KotlinSafeDeleteOverridingMethodUsageInfo extends SafeDeleteUsageInfo implements SafeDeleteCustomUsageInfo { - public KotlinSafeDeleteOverridingMethodUsageInfo(PsiElement overridingMethod, PsiElement method) { - super(toPsiMethod(overridingMethod), toPsiMethod(method)); +public class KotlinSafeDeleteOverridingUsageInfo extends SafeDeleteUsageInfo implements SafeDeleteCustomUsageInfo { + public KotlinSafeDeleteOverridingUsageInfo(PsiElement overridingElement, PsiElement superElement) { + super(overridingElement, superElement); } - protected static PsiMethod toPsiMethod(PsiElement element) { - if (element instanceof JetNamedFunction) { - element = LightClassUtil.getLightClassMethod((JetNamedFunction) element); - } - return element instanceof PsiMethod ? (PsiMethod) element : null; - } - - public PsiMethod getOverridingMethod() { - return toPsiMethod(getElement()); + public PsiElement getOverridingElement() { + return getElement(); } @Override public void performRefactoring() throws IncorrectOperationException { - PsiElement element = getElement(); + PsiElement element = JetPsiUtil.ascendIfPropertyAccessor(getElement()); if (element != null) { element.delete(); } 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 6109a9426e7..32e296c1c7e 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinSafeDeleteProcessor.java @@ -26,7 +26,6 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.ReferencesSearch; -import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.*; import com.intellij.refactoring.safeDelete.JavaSafeDeleteProcessor; import com.intellij.refactoring.safeDelete.NonCodeUsageSearchInfo; @@ -39,9 +38,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.asJava.LightClassUtil; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; -import org.jetbrains.jet.lang.descriptors.Modality; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -58,7 +55,8 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { return element instanceof JetClassOrObject || element instanceof JetObjectDeclarationName || element instanceof JetNamedFunction - || element instanceof PsiMethod; + || element instanceof PsiMethod + || element instanceof JetProperty; } @Override @@ -88,6 +86,14 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { if (element instanceof PsiMethod) { return findPsiMethodUsages((PsiMethod) element, allElementsToDelete, result); } + if (element instanceof JetProperty) { + JetProperty property = (JetProperty) element; + + if (property.isLocal()) { + return findLocalPropertyUsages(property, allElementsToDelete, result); + } + return findNonLocalPropertyUsages(property, allElementsToDelete, result); + } return getDefaultNonCodeUsageSearchInfo(element, allElementsToDelete); } @@ -156,7 +162,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { for (UsageInfo usageInfo : javaUsages) { if (usageInfo instanceof SafeDeleteOverridingMethodUsageInfo) { SafeDeleteOverridingMethodUsageInfo overrideUsageInfo = (SafeDeleteOverridingMethodUsageInfo) usageInfo; - usageInfo = new KotlinSafeDeleteOverridingMethodUsageInfo( + usageInfo = new KotlinSafeDeleteOverridingUsageInfo( overrideUsageInfo.getSmartPointer().getElement(), overrideUsageInfo.getReferencedElement() ); } @@ -221,6 +227,86 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { ); } + protected static NonCodeUsageSearchInfo findNonLocalPropertyUsages( + JetProperty property, + final PsiElement[] allElementsToDelete, + List result + ) { + LightClassUtil.PropertyAccessorsPsiMethods propertyMethods = LightClassUtil.getLightClassPropertyMethods(property); + PsiMethod getter = propertyMethods.getGetter(); + PsiMethod setter = propertyMethods.getSetter(); + + Collection references = ReferencesSearch.search(property).findAll(); + + Collection getterOverriding = + (getter != null) ? OverridingMethodsSearch.search(getter, true).findAll() : Collections.emptyList(); + Collection setterOverriding = + (setter != null) ? OverridingMethodsSearch.search(setter, true).findAll() : Collections.emptyList(); + + List overridingMethods = new ArrayList(); + overridingMethods.addAll(getterOverriding); + overridingMethods.addAll(setterOverriding); + overridingMethods = difference(overridingMethods, allElementsToDelete); + + for (PsiReference reference : references) { + PsiElement element = reference.getElement(); + if (!isInside(element, allElementsToDelete) && !isInside(element, overridingMethods)) { + JetImportDirective importDirective = PsiTreeUtil.getParentOfType(element, JetImportDirective.class, false); + if (importDirective != null) { + result.add(new SafeDeleteImportDirectiveUsageInfo(importDirective, property)); + } + else { + result.add(new SafeDeleteReferenceSimpleDeleteUsageInfo(element, property, false)); + } + } + } + + HashMap> methodToReferences = new HashMap>(); + for (PsiMethod overridingMethod : overridingMethods) { + Collection overridingReferences = + ReferencesSearch.search( + overridingMethod instanceof JetClsMethod ? ((JetClsMethod) overridingMethod).getOrigin() : overridingMethod + ).findAll(); + methodToReferences.put(overridingMethod, overridingReferences); + } + final Set safeGetterOverriding = + filterSafeOverridingMethods(getter, references, getterOverriding, methodToReferences, result, allElementsToDelete); + final Set safeSetterOverriding = + filterSafeOverridingMethods(setter, references, setterOverriding, methodToReferences, result, allElementsToDelete); + + return new NonCodeUsageSearchInfo( + new Condition() { + @Override + public boolean value(PsiElement usage) { + if (usage instanceof JetFile) return false; + return isInside(usage, allElementsToDelete) + || isInside(usage, safeGetterOverriding) + || isInside(usage, safeSetterOverriding) ; + } + }, + property + ); + } + + protected static NonCodeUsageSearchInfo findLocalPropertyUsages( + final JetProperty property, + final PsiElement[] allElementsToDelete, + final List result + ) { + ReferencesSearch.search(property, property.getUseScope()).forEach(new Processor() { + @Override + public boolean process(PsiReference reference) { + PsiElement element = reference.getElement(); + if (!isInside(element, allElementsToDelete)) { + result.add(new SafeDeleteReferenceSimpleDeleteUsageInfo(element, property, false)); + } + return true; + } + }); + + return getDefaultNonCodeUsageSearchInfo(property, allElementsToDelete); + } + /* * Mostly copied from JavaSafeDeleteProcessor.validateOverridingMethods * Revision: d4fc033 @@ -270,7 +356,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { for (PsiMethod method : validOverriding) { if (method != originalMethod) { - usages.add(new KotlinSafeDeleteOverridingMethodUsageInfo(method, originalMethod)); + usages.add(new KotlinSafeDeleteOverridingUsageInfo(method, originalMethod)); } } @@ -282,6 +368,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { PsiMethod[] methods = method.findSuperMethods(); for (PsiMethod superMethod: methods) { PsiElement relevantElement = superMethod instanceof JetClsMethod ? ((JetClsMethod) superMethod).getOrigin() : superMethod; + relevantElement = JetPsiUtil.ascendIfPropertyAccessor(relevantElement); if (ArrayUtilRt.find(ignore, relevantElement) < 0 && !MethodSignatureUtil.isSuperMethod(originalMethod, superMethod)) { return true; } @@ -289,7 +376,6 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { return false; } - private static String wrapOrSkip(String s, boolean inCode) { return inCode ? "" + s + "" : s; } @@ -339,6 +425,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { public static String formatPsiMethod(PsiMethod psiMethod, boolean showContainingClass, boolean inCode) { int options = PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS | PsiFormatUtilBase.SHOW_TYPE; if (showContainingClass) { + //noinspection ConstantConditions options |= PsiFormatUtilBase.SHOW_CONTAINING_CLASS; } @@ -350,7 +437,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { @Override public Collection findConflicts(PsiElement element, PsiElement[] allElementsToDelete) { - if (element instanceof JetNamedFunction) { + if (element instanceof JetNamedFunction || element instanceof JetProperty) { JetClass jetClass = PsiTreeUtil.getParentOfType(element, JetClass.class); if (jetClass == null || jetClass.getBody() != element.getParent()) return null; @@ -361,16 +448,16 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) element.getContainingFile()).getBindingContext(); DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element); - if (!(declarationDescriptor instanceof FunctionDescriptor)) return null; + if (!(declarationDescriptor instanceof CallableMemberDescriptor)) return null; List messages = new ArrayList(); - FunctionDescriptor functionDescriptor = (FunctionDescriptor) declarationDescriptor; - for (FunctionDescriptor overridenDescriptor : functionDescriptor.getOverriddenDescriptors()) { + CallableMemberDescriptor callableDescriptor = (CallableMemberDescriptor) declarationDescriptor; + for (CallableMemberDescriptor overridenDescriptor : callableDescriptor.getOverriddenDescriptors()) { if (overridenDescriptor.getModality() == Modality.ABSTRACT) { String message = JetBundle.message( "x.implements.y", - formatFunction(functionDescriptor, bindingContext, true), - formatClass(functionDescriptor.getContainingDeclaration(), bindingContext, true), + formatFunction(callableDescriptor, bindingContext, true), + formatClass(callableDescriptor.getContainingDeclaration(), bindingContext, true), formatFunction(overridenDescriptor, bindingContext, true), formatClass(overridenDescriptor.getContainingDeclaration(), bindingContext, true) ); @@ -395,7 +482,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { ArrayList overridingMethodUsages = new ArrayList(); for (UsageInfo usage : usages) { - if (usage instanceof KotlinSafeDeleteOverridingMethodUsageInfo) { + if (usage instanceof KotlinSafeDeleteOverridingUsageInfo) { overridingMethodUsages.add(usage); } else { @@ -419,8 +506,8 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { } private static void removeOverrideModifier(@NotNull PsiElement element) { - if (element instanceof JetNamedFunction) { - JetModifierList modifierList = ((JetNamedFunction) element).getModifierList(); + if (element instanceof JetNamedFunction || element instanceof JetProperty) { + JetModifierList modifierList = ((JetModifierListOwner) element).getModifierList(); if (modifierList == null) return; PsiElement overrideModifier = modifierList.getModifier(JetTokens.OVERRIDE_KEYWORD); @@ -458,21 +545,41 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { cleanUpOverrides(lightMethod); } + else if (element instanceof JetProperty) { + LightClassUtil.PropertyAccessorsPsiMethods propertyMethods = + LightClassUtil.getLightClassPropertyMethods((JetProperty) element); + PsiMethod getter = propertyMethods.getGetter(); + PsiMethod setter = propertyMethods.getSetter(); + + if (getter != null) { + cleanUpOverrides(getter); + } + if (setter != null) { + cleanUpOverrides(setter); + } + } + } + + private static boolean checkPsiMethodEquality(PsiMethod method1, PsiMethod method2) { + if (method1 instanceof JetClsMethod && method2 instanceof JetClsMethod) { + return ((JetClsMethod) method1).getOrigin() == ((JetClsMethod) method2).getOrigin(); + } + return method1 == method2; } private static void cleanUpOverrides(PsiMethod method) { - Collection superMethods = - SuperMethodsSearch.search(method, null, true, false).findAll(); - Collection overridingMethods = OverridingMethodsSearch.search(method, false).findAll(); + Collection superMethods = Arrays.asList(method.findSuperMethods(true)); + Collection overridingMethods = OverridingMethodsSearch.search(method, true).findAll(); overrideLoop: for (PsiMethod overridingMethod : overridingMethods) { PsiElement overridingElement = overridingMethod instanceof JetClsMethod ? ((JetClsMethod) overridingMethod).getOrigin() : overridingMethod; - Collection currentSuperMethods = - SuperMethodsSearch.search(overridingMethod, null, true, false).findAll(); + + Collection currentSuperMethods = new ArrayList(); + ContainerUtil.addAll(currentSuperMethods, overridingMethod.findSuperMethods(true)); currentSuperMethods.addAll(superMethods); - for (MethodSignatureBackedByPsiMethod superMethod: currentSuperMethods) { - if (superMethod.getMethod() != method) continue overrideLoop; + for (PsiMethod superMethod: currentSuperMethods) { + if (!checkPsiMethodEquality(superMethod, method)) continue overrideLoop; } removeOverrideModifier(overridingElement); @@ -481,22 +588,22 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { @Nullable private static Collection checkSuperMethods( - @NotNull JetNamedFunction function, @Nullable Collection ignore + @NotNull JetDeclaration declaration, @Nullable Collection ignore ) { final BindingContext bindingContext = - AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) function.getContainingFile()).getBindingContext(); + AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) declaration.getContainingFile()).getBindingContext(); - DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, function); - if (!(declarationDescriptor instanceof FunctionDescriptor)) return null; + DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration); + if (!(declarationDescriptor instanceof CallableMemberDescriptor)) return null; - FunctionDescriptor functionDescriptor = (FunctionDescriptor) declarationDescriptor; - Set overridenDescriptors = functionDescriptor.getOverriddenDescriptors(); + CallableMemberDescriptor callableDescriptor = (CallableMemberDescriptor) declarationDescriptor; + Set overridenDescriptors = callableDescriptor.getOverriddenDescriptors(); Collection superMethods = ContainerUtil.map( overridenDescriptors, - new Function() { + new Function() { @Override - public PsiElement fun(FunctionDescriptor descriptor) { + public PsiElement fun(CallableMemberDescriptor descriptor) { return BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor); } } @@ -505,7 +612,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { superMethods.removeAll(ignore); } - if (superMethods.isEmpty()) return Collections.singletonList(function); + if (superMethods.isEmpty()) return Collections.singletonList(declaration); List superClasses = ContainerUtil.map( superMethods, @@ -514,7 +621,7 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { public String fun(PsiElement element) { String description; - if (element instanceof JetNamedFunction) { + if (element instanceof JetNamedFunction || element instanceof JetProperty) { DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element); assert descriptor != null; @@ -541,19 +648,19 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { String superClassesStr = "\n" + StringUtil.join(superClasses, ""); String message = JetBundle.message( "x.overrides.y.in.class.list", - DescriptorRenderer.COMPACT.render(functionDescriptor), - DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(functionDescriptor.getContainingDeclaration()), + DescriptorRenderer.COMPACT.render(callableDescriptor), + DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(callableDescriptor.getContainingDeclaration()), superClassesStr ); int exitCode = Messages.showYesNoCancelDialog( - function.getProject(), message, IdeBundle.message("title.warning"), Messages.getQuestionIcon() + declaration.getProject(), message, IdeBundle.message("title.warning"), Messages.getQuestionIcon() ); switch (exitCode) { case Messages.YES: return superMethods; case Messages.NO: - return Collections.singletonList(function); + return Collections.singletonList(declaration); default: return Collections.emptyList(); } @@ -568,8 +675,8 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { return Collections.singletonList(element); } - if (element instanceof JetNamedFunction) { - return checkSuperMethods((JetNamedFunction) element, allElementsToDelete); + if (element instanceof JetNamedFunction || element instanceof JetProperty) { + return checkSuperMethods((JetDeclaration) element, allElementsToDelete); } return super.getElementsToSearch(element, module, allElementsToDelete); } @@ -583,4 +690,4 @@ public class KotlinSafeDeleteProcessor extends JavaSafeDeleteProcessor { } return super.getAdditionalElementsToDelete(element, allElementsToDelete, askUser); } -} +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava1.java b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.java new file mode 100644 index 00000000000..038532142a6 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.java @@ -0,0 +1,6 @@ +abstract class C implements B { + @Override + public String getFoo() { + return "C"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava1.java.after b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.java.after new file mode 100644 index 00000000000..8fe2c2eae56 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.java.after @@ -0,0 +1,2 @@ +abstract class C implements B { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt new file mode 100644 index 00000000000..9e9f79c0f44 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt @@ -0,0 +1,10 @@ +trait B { + public val foo: String +} + +class D: B { + public override val foo: String + get() { + return "D" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt.after b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt.after new file mode 100644 index 00000000000..9e9f79c0f44 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt.after @@ -0,0 +1,10 @@ +trait B { + public val foo: String +} + +class D: B { + public override val foo: String + get() { + return "D" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava2.java b/idea/testData/safeDelete/deleteJavaProperty/middleJava2.java new file mode 100644 index 00000000000..b9ae02e10eb --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava2.java @@ -0,0 +1,6 @@ +class C implements B { + @Override + public String getFoo() { + return "C"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt b/idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt new file mode 100644 index 00000000000..9e9f79c0f44 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt @@ -0,0 +1,10 @@ +trait B { + public val foo: String +} + +class D: B { + public override val foo: String + get() { + return "D" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt.messages b/idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt.messages new file mode 100644 index 00000000000..d9e387cd6cf --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt.messages @@ -0,0 +1 @@ +method C.getFoo() implements method B.getFoo(). \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava3.java b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.java new file mode 100644 index 00000000000..ad6960dd9a8 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.java @@ -0,0 +1,11 @@ +abstract class C implements B { + @Override + public String getFoo() { + return "C"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava3.java.after b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.java.after new file mode 100644 index 00000000000..92379701a9a --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.java.after @@ -0,0 +1,7 @@ +abstract class C implements B { + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt new file mode 100644 index 00000000000..c11f4b99a0d --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt @@ -0,0 +1,13 @@ +trait B { + public var foo: String +} + +class D: B { + public override var foo: String + get() { + return "D" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt.after b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt.after new file mode 100644 index 00000000000..c11f4b99a0d --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt.after @@ -0,0 +1,13 @@ +trait B { + public var foo: String +} + +class D: B { + public override var foo: String + get() { + return "D" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava4.java b/idea/testData/safeDelete/deleteJavaProperty/middleJava4.java new file mode 100644 index 00000000000..61bc3df1b51 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava4.java @@ -0,0 +1,11 @@ +class C implements B { + @Override + public String getFoo() { + return "C"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt b/idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt new file mode 100644 index 00000000000..c11f4b99a0d --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt @@ -0,0 +1,13 @@ +trait B { + public var foo: String +} + +class D: B { + public override var foo: String + get() { + return "D" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt.messages b/idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt.messages new file mode 100644 index 00000000000..d9e387cd6cf --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt.messages @@ -0,0 +1 @@ +method C.getFoo() implements method B.getFoo(). \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava5.java b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.java new file mode 100644 index 00000000000..f8c31d21509 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.java @@ -0,0 +1,11 @@ +abstract class C implements B { + @Override + public String getFoo() { + return "C"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava5.java.after b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.java.after new file mode 100644 index 00000000000..f29c7c69608 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.java.after @@ -0,0 +1,7 @@ +abstract class C implements B { + @Override + public String getFoo() { + return "C"; + } + +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt new file mode 100644 index 00000000000..c11f4b99a0d --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt @@ -0,0 +1,13 @@ +trait B { + public var foo: String +} + +class D: B { + public override var foo: String + get() { + return "D" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt.after b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt.after new file mode 100644 index 00000000000..c11f4b99a0d --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt.after @@ -0,0 +1,13 @@ +trait B { + public var foo: String +} + +class D: B { + public override var foo: String + get() { + return "D" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava6.java b/idea/testData/safeDelete/deleteJavaProperty/middleJava6.java new file mode 100644 index 00000000000..c75fb3da1b9 --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava6.java @@ -0,0 +1,11 @@ +class C implements B { + @Override + public String getFoo() { + return "C"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt b/idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt new file mode 100644 index 00000000000..c11f4b99a0d --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt @@ -0,0 +1,13 @@ +trait B { + public var foo: String +} + +class D: B { + public override var foo: String + get() { + return "D" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt.messages b/idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt.messages new file mode 100644 index 00000000000..4756057b5ef --- /dev/null +++ b/idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt.messages @@ -0,0 +1 @@ +method C.setFoo(String) implements method B.setFoo(String). \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement1.kt b/idea/testData/safeDelete/deleteProperty/implement1.kt new file mode 100644 index 00000000000..4eadc88fc83 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement1.kt @@ -0,0 +1,10 @@ +trait A { + val foo: String +} + +class B: A { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement1.kt.messages b/idea/testData/safeDelete/deleteProperty/implement1.kt.messages new file mode 100644 index 00000000000..53e9aecba2b --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement1.kt.messages @@ -0,0 +1 @@ +val foo: jet.String in final class B : A implements val foo: jet.String in trait A. \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement2.kt b/idea/testData/safeDelete/deleteProperty/implement2.kt new file mode 100644 index 00000000000..397629c1b41 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement2.kt @@ -0,0 +1,14 @@ +trait A { + val foo: String +} + +trait Z { + val foo: String +} + +class B: A, Z { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement2.kt.messages b/idea/testData/safeDelete/deleteProperty/implement2.kt.messages new file mode 100644 index 00000000000..69083c7329e --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement2.kt.messages @@ -0,0 +1,2 @@ +val foo: jet.String in final class B : A, Z implements val foo: jet.String in trait A. +val foo: jet.String in final class B : A, Z implements val foo: jet.String in trait Z. \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement3.kt b/idea/testData/safeDelete/deleteProperty/implement3.kt new file mode 100644 index 00000000000..cc1513a24ac --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement3.kt @@ -0,0 +1,13 @@ +trait A { + var foo: String +} + +class B: A { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement3.kt.messages b/idea/testData/safeDelete/deleteProperty/implement3.kt.messages new file mode 100644 index 00000000000..6087192024a --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement3.kt.messages @@ -0,0 +1 @@ +var foo: jet.String in final class B : A implements var foo: jet.String in trait A. \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement4.kt b/idea/testData/safeDelete/deleteProperty/implement4.kt new file mode 100644 index 00000000000..44eba662d4b --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement4.kt @@ -0,0 +1,17 @@ +trait A { + var foo: String +} + +trait Z { + var foo: String +} + +class B: A, Z { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/implement4.kt.messages b/idea/testData/safeDelete/deleteProperty/implement4.kt.messages new file mode 100644 index 00000000000..14e9862b541 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/implement4.kt.messages @@ -0,0 +1,2 @@ +var foo: jet.String in final class B : A, Z implements var foo: jet.String in trait A. +var foo: jet.String in final class B : A, Z implements var foo: jet.String in trait Z. \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt new file mode 100644 index 00000000000..073ea92153b --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt @@ -0,0 +1,10 @@ +trait A { + val foo: String +} + +class B: A { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt.after b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt.after new file mode 100644 index 00000000000..0871f59a81d --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt.after @@ -0,0 +1,5 @@ +trait A { +} + +class B: A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt new file mode 100644 index 00000000000..f6e0d3090dc --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt @@ -0,0 +1,13 @@ +trait A { + var foo: String +} + +class B: A { + override val foo: String + get() { + return "B" + } + set(value: String) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt.after b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt.after new file mode 100644 index 00000000000..0871f59a81d --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt.after @@ -0,0 +1,5 @@ +trait A { +} + +class B: A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt new file mode 100644 index 00000000000..5741c8a06a1 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt @@ -0,0 +1,14 @@ +trait A { + val foo: String +} + +trait Z { + val foo: String +} + +class B: A, Z { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt.after b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt.after new file mode 100644 index 00000000000..f64cb49eb15 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt.after @@ -0,0 +1,13 @@ +trait A { +} + +trait Z { + val foo: String +} + +class B: A, Z { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt new file mode 100644 index 00000000000..2a4da6a8b3e --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt @@ -0,0 +1,17 @@ +trait A { + var foo: String +} + +trait Z { + var foo: String +} + +class B: A, Z { + override val foo: String + get() { + return "B" + } + set(value: String) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt.after b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt.after new file mode 100644 index 00000000000..809e3d99802 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt.after @@ -0,0 +1,16 @@ +trait A { +} + +trait Z { + var foo: String +} + +class B: A, Z { + override val foo: String + get() { + return "B" + } + set(value: String) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/noUsages.kt b/idea/testData/safeDelete/deleteProperty/noUsages.kt new file mode 100644 index 00000000000..4d319077029 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/noUsages.kt @@ -0,0 +1,9 @@ +class C { + val foo: String + get() { + return "foo" + } +} + +class B { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/noUsages.kt.after b/idea/testData/safeDelete/deleteProperty/noUsages.kt.after new file mode 100644 index 00000000000..3f11a5b1fd3 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/noUsages.kt.after @@ -0,0 +1,5 @@ +class C { +} + +class B { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override1.kt b/idea/testData/safeDelete/deleteProperty/override1.kt new file mode 100644 index 00000000000..c7d865700ae --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override1.kt @@ -0,0 +1,13 @@ +open class A { + open val foo: String + get() { + return "A" + } +} + +class B: A() { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override1.kt.after b/idea/testData/safeDelete/deleteProperty/override1.kt.after new file mode 100644 index 00000000000..b8d4754717a --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override1.kt.after @@ -0,0 +1,9 @@ +open class A { + open val foo: String + get() { + return "A" + } +} + +class B: A() { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override2.kt b/idea/testData/safeDelete/deleteProperty/override2.kt new file mode 100644 index 00000000000..143e0524635 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override2.kt @@ -0,0 +1,13 @@ +open class A { + open val foo: String + get() { + return "A" + } +} + +class B: A() { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override2.kt.after b/idea/testData/safeDelete/deleteProperty/override2.kt.after new file mode 100644 index 00000000000..2e12ddcf430 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override2.kt.after @@ -0,0 +1,5 @@ +open class A { +} + +class B: A() { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override3.kt b/idea/testData/safeDelete/deleteProperty/override3.kt new file mode 100644 index 00000000000..f0482ac9eb9 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override3.kt @@ -0,0 +1,19 @@ +open class A { + open var foo: String + get() { + return "A" + } + set(value: String) { + println() + } +} + +class B: A() { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override3.kt.after b/idea/testData/safeDelete/deleteProperty/override3.kt.after new file mode 100644 index 00000000000..8c7e56ac59f --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override3.kt.after @@ -0,0 +1,12 @@ +open class A { + open var foo: String + get() { + return "A" + } + set(value: String) { + println() + } +} + +class B: A() { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override4.kt b/idea/testData/safeDelete/deleteProperty/override4.kt new file mode 100644 index 00000000000..29f517352ef --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override4.kt @@ -0,0 +1,19 @@ +open class A { + open var foo: String + get() { + return "A" + } + set(value: String) { + println() + } +} + +class B: A() { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/override4.kt.after b/idea/testData/safeDelete/deleteProperty/override4.kt.after new file mode 100644 index 00000000000..2e12ddcf430 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/override4.kt.after @@ -0,0 +1,5 @@ +open class A { +} + +class B: A() { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt b/idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt new file mode 100644 index 00000000000..b5375ac18c3 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt @@ -0,0 +1,17 @@ +open class A { + open val foo: String + get() { + return "A" + } +} + +trait Z { + val foo: String +} + +class B: A(), Z { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt.messages b/idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt.messages new file mode 100644 index 00000000000..272320ee4a8 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt.messages @@ -0,0 +1 @@ +val foo: jet.String in final class B : A, Z implements val foo: jet.String in trait Z. \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt b/idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt new file mode 100644 index 00000000000..6d50398b5e5 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt @@ -0,0 +1,17 @@ +open class A { + open val foo: String + get() { + return "A" + } +} + +trait Z { + val foo: String +} + +class B: A(), Z { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt.after b/idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt.after new file mode 100644 index 00000000000..318931f9611 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt.after @@ -0,0 +1,13 @@ +open class A { +} + +trait Z { + val foo: String +} + +class B: A(), Z { + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt b/idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt new file mode 100644 index 00000000000..db2514aed28 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt @@ -0,0 +1,23 @@ +open class A { + open var foo: String + get() { + return "A" + } + set(value: String) { + println() + } +} + +trait Z { + var foo: String +} + +class B: A(), Z { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt.messages b/idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt.messages new file mode 100644 index 00000000000..a77a84f4822 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt.messages @@ -0,0 +1 @@ +var foo: jet.String in final class B : A, Z implements var foo: jet.String in trait Z. \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt b/idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt new file mode 100644 index 00000000000..dfe81b89bdf --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt @@ -0,0 +1,23 @@ +open class A { + open var foo: String + get() { + return "A" + } + set(value: String) { + println() + } +} + +trait Z { + var foo: String +} + +class B: A(), Z { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt.after b/idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt.after new file mode 100644 index 00000000000..d1b327a1ecd --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt.after @@ -0,0 +1,16 @@ +open class A { +} + +trait Z { + var foo: String +} + +class B: A(), Z { + override var foo: String + get() { + return "B" + } + set(value: String) { + println() + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt b/idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt new file mode 100644 index 00000000000..116ee3d437d --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt @@ -0,0 +1,17 @@ +open class A { + val foo: String + get() { + return "A" + } +} + +class B: A { + fun bar() { + println(foo) + } + + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt.after b/idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt.after new file mode 100644 index 00000000000..eadc1b99704 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt.after @@ -0,0 +1,13 @@ +open class A { +} + +class B: A { + fun bar() { + println(foo) + } + + override val foo: String + get() { + return "B" + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/property1.kt b/idea/testData/safeDelete/deleteProperty/property1.kt new file mode 100644 index 00000000000..35b96e23e78 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/property1.kt @@ -0,0 +1,9 @@ +package test + +import test.foo + +val foo = "foo" + +class B { + +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/property1.kt.after b/idea/testData/safeDelete/deleteProperty/property1.kt.after new file mode 100644 index 00000000000..191deddb2f8 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/property1.kt.after @@ -0,0 +1,5 @@ +package test + +class B { + +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/property2.kt b/idea/testData/safeDelete/deleteProperty/property2.kt new file mode 100644 index 00000000000..1159ac84a4a --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/property2.kt @@ -0,0 +1,9 @@ +package test + +import test.foo + +val foo = "foo" + +class B { + val ref = foo +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deleteProperty/property2.kt.messages b/idea/testData/safeDelete/deleteProperty/property2.kt.messages new file mode 100644 index 00000000000..d2f766d3650 --- /dev/null +++ b/idea/testData/safeDelete/deleteProperty/property2.kt.messages @@ -0,0 +1,2 @@ +Property foo has 1 usage that is not safe to delete. +Of those 0 usages are in strings, comments, or non-code files. \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java new file mode 100644 index 00000000000..af0a7bf7e69 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java @@ -0,0 +1,6 @@ +class B implements A, Z { + @Override + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java.after new file mode 100644 index 00000000000..af0a7bf7e69 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.java.after @@ -0,0 +1,6 @@ +class B implements A, Z { + @Override + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt new file mode 100644 index 00000000000..26e7a8e3b69 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt @@ -0,0 +1,7 @@ +trait A { + val foo: String +} + +trait Z { + val foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt.after new file mode 100644 index 00000000000..94649ec3262 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt.after @@ -0,0 +1,6 @@ +trait A { +} + +trait Z { + val foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java new file mode 100644 index 00000000000..125d208d540 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java @@ -0,0 +1,6 @@ +class B implements A { + @Override + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java.after new file mode 100644 index 00000000000..96506701c7c --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.java.after @@ -0,0 +1,2 @@ +class B implements A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt new file mode 100644 index 00000000000..cde120d0433 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt @@ -0,0 +1,3 @@ +trait A { + val foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt.after new file mode 100644 index 00000000000..670cabdb241 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt.after @@ -0,0 +1,2 @@ +trait A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java new file mode 100644 index 00000000000..49c6fb47c97 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java @@ -0,0 +1,11 @@ +class B implements A, Z { + @Override + public String getFoo() { + return "foo"; + } + + @Override + public void getFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java.after new file mode 100644 index 00000000000..49c6fb47c97 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.java.after @@ -0,0 +1,11 @@ +class B implements A, Z { + @Override + public String getFoo() { + return "foo"; + } + + @Override + public void getFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt new file mode 100644 index 00000000000..5600171ddb9 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt @@ -0,0 +1,7 @@ +trait A { + var foo: String +} + +trait Z { + var foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt.after new file mode 100644 index 00000000000..09c2215819e --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt.after @@ -0,0 +1,6 @@ +trait A { +} + +trait Z { + var foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java new file mode 100644 index 00000000000..109de6881dd --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java @@ -0,0 +1,11 @@ +class B implements A { + @Override + public String getFoo() { + return "foo"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java.after new file mode 100644 index 00000000000..6fba1ed417f --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.java.after @@ -0,0 +1,3 @@ +class B implements A { + +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt new file mode 100644 index 00000000000..d3dc5269244 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt @@ -0,0 +1,3 @@ +trait A { + var foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt.after new file mode 100644 index 00000000000..670cabdb241 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt.after @@ -0,0 +1,2 @@ +trait A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java new file mode 100644 index 00000000000..89df5ae21bf --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java @@ -0,0 +1,10 @@ +class B extends A { + void bar() { + System.out.println(getFoo()); + } + + @Override + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java.after new file mode 100644 index 00000000000..024020820cf --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.java.after @@ -0,0 +1,9 @@ +class B extends A { + void bar() { + System.out.println(getFoo()); + } + + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt new file mode 100644 index 00000000000..2e798b03888 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt @@ -0,0 +1,3 @@ +open class A { + open val foo: String = "" +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt.after new file mode 100644 index 00000000000..d80ee90d357 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt.after @@ -0,0 +1,2 @@ +open class A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java new file mode 100644 index 00000000000..ad44ac28137 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java @@ -0,0 +1,6 @@ +class B extends A { + @Override + String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java.after new file mode 100644 index 00000000000..99b93165680 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.java.after @@ -0,0 +1,2 @@ +class B extends A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt new file mode 100644 index 00000000000..2e798b03888 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt @@ -0,0 +1,3 @@ +open class A { + open val foo: String = "" +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt.after new file mode 100644 index 00000000000..d80ee90d357 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt.after @@ -0,0 +1,2 @@ +open class A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java new file mode 100644 index 00000000000..04c0db3b0f8 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java @@ -0,0 +1,16 @@ +class B extends A { + void bar() { + setFoo(""); + System.out.println(getFoo()); + } + + @Override + public String getFoo() { + return "foo"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java.after new file mode 100644 index 00000000000..b89d47ddae0 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.java.after @@ -0,0 +1,14 @@ +class B extends A { + void bar() { + setFoo(""); + System.out.println(getFoo()); + } + + public String getFoo() { + return "foo"; + } + + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt new file mode 100644 index 00000000000..4b6b71bec3e --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt @@ -0,0 +1,3 @@ +open class A { + open var foo: String = "" +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt.after new file mode 100644 index 00000000000..d80ee90d357 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt.after @@ -0,0 +1,2 @@ +open class A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java new file mode 100644 index 00000000000..9cb60a4034a --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java @@ -0,0 +1,11 @@ +class B extends A { + @Override + String getFoo() { + return "foo"; + } + + @Override + void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java.after new file mode 100644 index 00000000000..e64e5410e0b --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.java.after @@ -0,0 +1,3 @@ +class B extends A { + +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt new file mode 100644 index 00000000000..4b6b71bec3e --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt @@ -0,0 +1,3 @@ +open class A { + open var foo: String = "" +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt.after new file mode 100644 index 00000000000..d80ee90d357 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt.after @@ -0,0 +1,2 @@ +open class A { +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java new file mode 100644 index 00000000000..a3b697c5a77 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java @@ -0,0 +1,6 @@ +class B extends A implements Z { + @Override + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java.after new file mode 100644 index 00000000000..a3b697c5a77 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.java.after @@ -0,0 +1,6 @@ +class B extends A implements Z { + @Override + public String getFoo() { + return "foo"; + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt new file mode 100644 index 00000000000..af324af6f89 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt @@ -0,0 +1,7 @@ +open class A { + public open val foo: String = "" +} + +trait Z { + public val foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt.after new file mode 100644 index 00000000000..b113d6fca1c --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt.after @@ -0,0 +1,6 @@ +open class A { +} + +trait Z { + public val foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java new file mode 100644 index 00000000000..2cc02fa2d1a --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java @@ -0,0 +1,11 @@ +class B extends A implements Z { + @Override + public String getFoo() { + return "foo"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java.after new file mode 100644 index 00000000000..2cc02fa2d1a --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.java.after @@ -0,0 +1,11 @@ +class B extends A implements Z { + @Override + public String getFoo() { + return "foo"; + } + + @Override + public void setFoo(String value) { + + } +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt new file mode 100644 index 00000000000..b7c42f595d3 --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt @@ -0,0 +1,7 @@ +open class A { + public open var foo: String = "" +} + +trait Z { + public var foo: String +} \ No newline at end of file diff --git a/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt.after b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt.after new file mode 100644 index 00000000000..8a49833453f --- /dev/null +++ b/idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt.after @@ -0,0 +1,6 @@ +open class A { +} + +trait Z { + public var foo: String +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/safeDelete/AbstractJetSafeDeleteTest.java b/idea/tests/org/jetbrains/jet/safeDelete/AbstractJetSafeDeleteTest.java index 0ef86248851..6cc4afb9aa9 100644 --- a/idea/tests/org/jetbrains/jet/safeDelete/AbstractJetSafeDeleteTest.java +++ b/idea/tests/org/jetbrains/jet/safeDelete/AbstractJetSafeDeleteTest.java @@ -32,6 +32,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.psi.JetObjectDeclarationName; +import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.plugin.JetLightProjectDescriptor; import org.jetbrains.jet.plugin.PluginTestCaseBase; @@ -74,6 +75,18 @@ public abstract class AbstractJetSafeDeleteTest extends LightCodeInsightFixtureT doTest(path, PsiMethod.class, true); } + public void doPropertyTest(@NotNull String path) throws Exception { + doTest(path, JetProperty.class, false); + } + + public void doPropertyTestWithJava(@NotNull String path) throws Exception { + doTest(path, JetProperty.class, true); + } + + public void doJavaPropertyTest(@NotNull String path) throws Exception { + doTest(path, PsiMethod.class, true); + } + private void doTest( @NotNull String path, @NotNull Class elementClass, boolean withJava) throws Exception { String[] filePaths; diff --git a/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java b/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java index a8cc1c56b4d..7a24940eb3e 100644 --- a/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/safeDelete/JetSafeDeleteTestGenerated.java @@ -30,7 +30,7 @@ import org.jetbrains.jet.safeDelete.AbstractJetSafeDeleteTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") -@InnerTestClasses({JetSafeDeleteTestGenerated.DeleteClass.class, JetSafeDeleteTestGenerated.DeleteObject.class, JetSafeDeleteTestGenerated.DeleteFunction.class, JetSafeDeleteTestGenerated.DeleteFunctionWithJavaUsages.class}) +@InnerTestClasses({JetSafeDeleteTestGenerated.DeleteClass.class, JetSafeDeleteTestGenerated.DeleteObject.class, JetSafeDeleteTestGenerated.DeleteFunction.class, JetSafeDeleteTestGenerated.DeleteFunctionWithJavaUsages.class, JetSafeDeleteTestGenerated.DeleteJavaMethod.class, JetSafeDeleteTestGenerated.DeleteProperty.class, JetSafeDeleteTestGenerated.DeletePropertyWithJavaUsages.class, JetSafeDeleteTestGenerated.DeleteJavaProperty.class}) public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest { @TestMetadata("idea/testData/safeDelete/deleteClass") public static class DeleteClass extends AbstractJetSafeDeleteTest { @@ -229,12 +229,238 @@ public class JetSafeDeleteTestGenerated extends AbstractJetSafeDeleteTest { } + @TestMetadata("idea/testData/safeDelete/deleteJavaMethod") + public static class DeleteJavaMethod extends AbstractJetSafeDeleteTest { + public void testAllFilesPresentInDeleteJavaMethod() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/safeDelete/deleteJavaMethod"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("mixedHierarchy1.kt") + public void testMixedHierarchy1() throws Exception { + doJavaMethodTest("idea/testData/safeDelete/deleteJavaMethod/mixedHierarchy1.kt"); + } + + @TestMetadata("mixedHierarchy2.kt") + public void testMixedHierarchy2() throws Exception { + doJavaMethodTest("idea/testData/safeDelete/deleteJavaMethod/mixedHierarchy2.kt"); + } + + } + + @TestMetadata("idea/testData/safeDelete/deleteProperty") + public static class DeleteProperty extends AbstractJetSafeDeleteTest { + public void testAllFilesPresentInDeleteProperty() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/safeDelete/deleteProperty"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("implement1.kt") + public void testImplement1() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/implement1.kt"); + } + + @TestMetadata("implement2.kt") + public void testImplement2() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/implement2.kt"); + } + + @TestMetadata("implement3.kt") + public void testImplement3() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/implement3.kt"); + } + + @TestMetadata("implement4.kt") + public void testImplement4() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/implement4.kt"); + } + + @TestMetadata("implement5.kt") + public void testImplement5() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/kotlinProperty/implement5.kt"); + } + + @TestMetadata("implement6.kt") + public void testImplement6() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/kotlinProperty/implement6.kt"); + } + + @TestMetadata("implement7.kt") + public void testImplement7() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/kotlinProperty/implement7.kt"); + } + + @TestMetadata("implement8.kt") + public void testImplement8() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/kotlinProperty/implement8.kt"); + } + + @TestMetadata("noUsages.kt") + public void testNoUsages() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/noUsages.kt"); + } + + @TestMetadata("override1.kt") + public void testOverride1() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/override1.kt"); + } + + @TestMetadata("override2.kt") + public void testOverride2() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/override2.kt"); + } + + @TestMetadata("override3.kt") + public void testOverride3() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/override3.kt"); + } + + @TestMetadata("override4.kt") + public void testOverride4() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/override4.kt"); + } + + @TestMetadata("overrideAndImplement1.kt") + public void testOverrideAndImplement1() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/overrideAndImplement1.kt"); + } + + @TestMetadata("overrideAndImplement2.kt") + public void testOverrideAndImplement2() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/overrideAndImplement2.kt"); + } + + @TestMetadata("overrideAndImplement3.kt") + public void testOverrideAndImplement3() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/overrideAndImplement3.kt"); + } + + @TestMetadata("overrideAndImplement4.kt") + public void testOverrideAndImplement4() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/overrideAndImplement4.kt"); + } + + @TestMetadata("overrideWithUsages.kt") + public void testOverrideWithUsages() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/overrideWithUsages.kt"); + } + + @TestMetadata("property1.kt") + public void testProperty1() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/property1.kt"); + } + + @TestMetadata("property2.kt") + public void testProperty2() throws Exception { + doPropertyTest("idea/testData/safeDelete/deleteProperty/property2.kt"); + } + + } + + @TestMetadata("idea/testData/safeDelete/deletePropertyWithJavaUsages") + public static class DeletePropertyWithJavaUsages extends AbstractJetSafeDeleteTest { + public void testAllFilesPresentInDeletePropertyWithJavaUsages() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/safeDelete/deletePropertyWithJavaUsages"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("implement1.kt") + public void testImplement1() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/implement1.kt"); + } + + @TestMetadata("implement2.kt") + public void testImplement2() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/implement2.kt"); + } + + @TestMetadata("implement3.kt") + public void testImplement3() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/implement3.kt"); + } + + @TestMetadata("implement4.kt") + public void testImplement4() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/implement4.kt"); + } + + @TestMetadata("override1.kt") + public void testOverride1() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/override1.kt"); + } + + @TestMetadata("override2.kt") + public void testOverride2() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/override2.kt"); + } + + @TestMetadata("override3.kt") + public void testOverride3() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/override3.kt"); + } + + @TestMetadata("override4.kt") + public void testOverride4() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/override4.kt"); + } + + @TestMetadata("overrideAndImplement1.kt") + public void testOverrideAndImplement1() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement1.kt"); + } + + @TestMetadata("overrideAndImplement2.kt") + public void testOverrideAndImplement2() throws Exception { + doPropertyTestWithJava("idea/testData/safeDelete/deletePropertyWithJavaUsages/overrideAndImplement2.kt"); + } + + } + + @TestMetadata("idea/testData/safeDelete/deleteJavaProperty") + public static class DeleteJavaProperty extends AbstractJetSafeDeleteTest { + public void testAllFilesPresentInDeleteJavaProperty() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/safeDelete/deleteJavaProperty"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("middleJava1.kt") + public void testMiddleJava1() throws Exception { + doJavaPropertyTest("idea/testData/safeDelete/deleteJavaProperty/middleJava1.kt"); + } + + @TestMetadata("middleJava2.kt") + public void testMiddleJava2() throws Exception { + doJavaPropertyTest("idea/testData/safeDelete/deleteJavaProperty/middleJava2.kt"); + } + + @TestMetadata("middleJava3.kt") + public void testMiddleJava3() throws Exception { + doJavaPropertyTest("idea/testData/safeDelete/deleteJavaProperty/middleJava3.kt"); + } + + @TestMetadata("middleJava4.kt") + public void testMiddleJava4() throws Exception { + doJavaPropertyTest("idea/testData/safeDelete/deleteJavaProperty/middleJava4.kt"); + } + + @TestMetadata("middleJava5.kt") + public void testMiddleJava5() throws Exception { + doJavaPropertyTest("idea/testData/safeDelete/deleteJavaProperty/middleJava5.kt"); + } + + @TestMetadata("middleJava6.kt") + public void testMiddleJava6() throws Exception { + doJavaPropertyTest("idea/testData/safeDelete/deleteJavaProperty/middleJava6.kt"); + } + + } + public static Test suite() { TestSuite suite = new TestSuite("JetSafeDeleteTestGenerated"); suite.addTestSuite(DeleteClass.class); suite.addTestSuite(DeleteObject.class); suite.addTestSuite(DeleteFunction.class); suite.addTestSuite(DeleteFunctionWithJavaUsages.class); + suite.addTestSuite(DeleteJavaMethod.class); + suite.addTestSuite(DeleteProperty.class); + suite.addTestSuite(DeletePropertyWithJavaUsages.class); + suite.addTestSuite(DeleteJavaProperty.class); return suite; } }