Pull Up: Do not suggest indirect superinterfaces in the Pull Up dialog. Prefer superclass over superinterface as pull-up target

#KT-9543 Fixed
This commit is contained in:
Alexey Sedunov
2015-10-15 18:24:00 +03:00
parent 93ab055d17
commit c2c8eccc77
4 changed files with 15 additions and 32 deletions
@@ -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
@@ -79,14 +79,16 @@ public class KotlinMemberInfoStorage(
&& !(it is KtObjectDeclaration && it.isCompanion())
&& myFilter.includeMember(it) }
.mapTo(temp) { KotlinMemberInfo(it as KtNamedDeclaration) }
aClass.getDelegationSpecifiers()
.filterIsInstance<KtDelegatorToSuperClass>()
.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<KtDelegatorToSuperClass>()
.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) }
}
}
}
@@ -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<KotlinMemberInfo>) =
KotlinMemberSelectionTable(infos, null, "Make abstract")