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 1e13dc8ecdf..91c52a0ae65 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpDialog.kt @@ -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() { + 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) { + 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