From 074ad6b5f02981df065770c640d57fb528bd9ddd Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 30 Sep 2016 16:13:52 +0300 Subject: [PATCH] Move out of Companion Object: Warn if traget class already contains function with the same signature #KT-13877 Fixed --- .../MoveMemberOutOfCompanionObjectIntention.kt | 14 ++++++++++++++ .../moveOutOfCompanion/redeclarationConflict.kt | 7 +++++++ .../idea/intentions/IntentionTestGenerated.java | 6 ++++++ 3 files changed, 27 insertions(+) create mode 100644 idea/testData/intentions/moveOutOfCompanion/redeclarationConflict.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt index 6871b83b4ef..099cc8bc72f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveMemberOutOfCompanionObjectIntention.kt @@ -20,7 +20,12 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import com.intellij.psi.search.searches.ReferencesSearch +import com.intellij.refactoring.util.RefactoringUIUtil import com.intellij.util.containers.MultiMap +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.* import org.jetbrains.kotlin.idea.refactoring.runSynchronouslyWithProgress @@ -28,6 +33,7 @@ import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.isAncestor +import org.jetbrains.kotlin.util.findCallableMemberBySignature class MoveMemberOutOfCompanionObjectIntention : SelfTargetingRangeIntention(KtNamedDeclaration::class.java, "Move out of companion object") { @@ -73,6 +79,14 @@ class MoveMemberOutOfCompanionObjectIntention : SelfTargetingRangeIntentionf1(n: Int){} + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 51550e9fea2..efe57f3b323 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -9306,6 +9306,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/moveOutOfCompanion/notCompanion2.kt"); doTest(fileName); } + + @TestMetadata("redeclarationConflict.kt") + public void testRedeclarationConflict() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/moveOutOfCompanion/redeclarationConflict.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/intentions/moveToCompanion")