From c2c8eccc774b42dab51001adad98b1e5993cd32e Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 15 Oct 2015 18:24:00 +0300 Subject: [PATCH] Pull Up: Do not suggest indirect superinterfaces in the Pull Up dialog. Prefer superclass over superinterface as pull-up target #KT-9543 Fixed --- .idea/ant.xml | 22 ------------------- .../idea/refactoring/jetRefactoringUtil.kt | 2 ++ .../memberInfo/KotlinMemberInfoStorage.kt | 20 +++++++++-------- .../refactoring/pullUp/KotlinPullUpDialog.kt | 3 ++- 4 files changed, 15 insertions(+), 32 deletions(-) delete mode 100644 .idea/ant.xml diff --git a/.idea/ant.xml b/.idea/ant.xml deleted file mode 100644 index bbff6871e08..00000000000 --- a/.idea/ant.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt index 3ec5a5daae2..64f50261d9a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt @@ -709,3 +709,5 @@ public fun KtClass.createPrimaryConstructorParameterListIfAbsent(): KtParameterL if (parameterList != null) return parameterList return constructor.add(KtPsiFactory(project).createParameterList("()")) as KtParameterList } + +fun PsiNamedElement.isInterfaceClass(): Boolean = this is KtClass && isInterface() || this is PsiClass && isInterface diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinMemberInfoStorage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinMemberInfoStorage.kt index 1f31877dd50..8a476e9696f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinMemberInfoStorage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/memberInfo/KotlinMemberInfoStorage.kt @@ -79,14 +79,16 @@ public class KotlinMemberInfoStorage( && !(it is KtObjectDeclaration && it.isCompanion()) && myFilter.includeMember(it) } .mapTo(temp) { KotlinMemberInfo(it as KtNamedDeclaration) } - aClass.getDelegationSpecifiers() - .filterIsInstance() - .map { - val type = context[BindingContext.TYPE, it.typeReference] - val classDescriptor = type?.constructor?.declarationDescriptor as? ClassDescriptor - classDescriptor?.source?.getPsi() as? KtClass - } - .filter { it != null && it.isInterface() } - .mapTo(temp) { KotlinMemberInfo(it!!, true) } + if (aClass == myClass) { + aClass.getDelegationSpecifiers() + .filterIsInstance() + .map { + val type = context[BindingContext.TYPE, it.typeReference] + val classDescriptor = type?.constructor?.declarationDescriptor as? ClassDescriptor + classDescriptor?.source?.getPsi() as? KtClass + } + .filter { it != null && it.isInterface() } + .mapTo(temp) { KotlinMemberInfo(it!!, true) } + } } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt index 42a82d4dbd6..d00043681d6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt @@ -26,6 +26,7 @@ import com.intellij.refactoring.classMembers.AbstractMemberInfoModel import com.intellij.refactoring.memberPullUp.PullUpProcessor import com.intellij.refactoring.util.DocCommentPolicy import org.jetbrains.kotlin.asJava.toLightClass +import org.jetbrains.kotlin.idea.core.refactoring.isInterfaceClass import org.jetbrains.kotlin.idea.refactoring.memberInfo.* import org.jetbrains.kotlin.psi.* @@ -89,7 +90,7 @@ public class KotlinPullUpDialog( override fun createMemberInfoModel() = MemberInfoModelImpl() - override fun getPreselection() = mySuperClasses.firstOrNull() + override fun getPreselection() = mySuperClasses.firstOrNull { !it.isInterfaceClass() } ?: mySuperClasses.firstOrNull() override fun createMemberSelectionTable(infos: MutableList) = KotlinMemberSelectionTable(infos, null, "Make abstract")