Pull Up: Default to "Make abstract" when moving to interface

#KT-9832 Fixed
This commit is contained in:
Alexey Sedunov
2015-12-11 18:10:23 +03:00
parent 04c6ea78c7
commit 258a6328a8
@@ -23,6 +23,7 @@ import com.intellij.psi.PsiComment
import com.intellij.psi.PsiNamedElement
import com.intellij.refactoring.JavaRefactoringSettings
import com.intellij.refactoring.classMembers.AbstractMemberInfoModel
import com.intellij.refactoring.classMembers.MemberInfoChange
import com.intellij.refactoring.classMembers.MemberInfoModel
import com.intellij.refactoring.memberPullUp.PullUpProcessor
import com.intellij.refactoring.util.DocCommentPolicy
@@ -44,6 +45,8 @@ public class KotlinPullUpDialog(
}
private inner class MemberInfoModelImpl : AbstractMemberInfoModel<KtNamedDeclaration, KotlinMemberInfo>() {
private var lastSuperClass: PsiNamedElement? = null
// Abstract members remain abstract
override fun isFixedAbstract(memberInfo: KotlinMemberInfo?) = true
@@ -79,6 +82,15 @@ public class KotlinPullUpDialog(
if (member in memberInfoStorage.getExtending(superClass)) return false
return true
}
override fun memberInfoChanged(event: MemberInfoChange<KtNamedDeclaration, KotlinMemberInfo>) {
val superClass = superClass ?: return
if (superClass != lastSuperClass) {
lastSuperClass = superClass
val isInterface = superClass is KtClass && superClass.isInterface()
event.changedMembers.forEach { it.isToAbstract = isInterface }
}
}
}
protected val memberInfoStorage: KotlinMemberInfoStorage get() = myMemberInfoStorage