Extract Superclass/Interface: Add filename field to the dialog
This commit is contained in:
+40
-6
@@ -24,6 +24,9 @@ import com.intellij.refactoring.classMembers.MemberInfoChange
|
|||||||
import com.intellij.refactoring.extractSuperclass.JavaExtractSuperBaseDialog
|
import com.intellij.refactoring.extractSuperclass.JavaExtractSuperBaseDialog
|
||||||
import com.intellij.refactoring.util.DocCommentPolicy
|
import com.intellij.refactoring.util.DocCommentPolicy
|
||||||
import com.intellij.refactoring.util.RefactoringMessageUtil
|
import com.intellij.refactoring.util.RefactoringMessageUtil
|
||||||
|
import com.intellij.ui.DocumentAdapter
|
||||||
|
import com.intellij.ui.components.JBLabel
|
||||||
|
import com.intellij.util.ui.FormBuilder
|
||||||
import org.jetbrains.kotlin.asJava.toLightClass
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.asJava.unwrapped
|
import org.jetbrains.kotlin.asJava.unwrapped
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
@@ -37,10 +40,8 @@ import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinUsesAndInterfacesD
|
|||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
import javax.swing.Box
|
import javax.swing.*
|
||||||
import javax.swing.JComponent
|
import javax.swing.event.DocumentEvent
|
||||||
import javax.swing.JPanel
|
|
||||||
import javax.swing.JTextField
|
|
||||||
|
|
||||||
abstract class KotlinExtractSuperDialogBase(
|
abstract class KotlinExtractSuperDialogBase(
|
||||||
protected val originalClass: KtClassOrObject,
|
protected val originalClass: KtClassOrObject,
|
||||||
@@ -71,6 +72,10 @@ abstract class KotlinExtractSuperDialogBase(
|
|||||||
val targetFileName: String
|
val targetFileName: String
|
||||||
get() = fileNameField.text
|
get() = fileNameField.text
|
||||||
|
|
||||||
|
private fun resetFileNameField() {
|
||||||
|
fileNameField.text = "$extractedSuperName.${KotlinFileType.EXTENSION}"
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract fun createMemberInfoModel(): MemberInfoModelBase
|
protected abstract fun createMemberInfoModel(): MemberInfoModelBase
|
||||||
|
|
||||||
override fun getDocCommentPanelName() = "KDoc for abstracts"
|
override fun getDocCommentPanelName() = "KDoc for abstracts"
|
||||||
@@ -79,7 +84,36 @@ abstract class KotlinExtractSuperDialogBase(
|
|||||||
|
|
||||||
override fun createActionComponent() = Box.createHorizontalBox()!!
|
override fun createActionComponent() = Box.createHorizontalBox()!!
|
||||||
|
|
||||||
override fun createDestinationRootPanel() = if (targetParent is PsiDirectory) super.createDestinationRootPanel() else null
|
override fun createExtractedSuperNameField(): JTextField {
|
||||||
|
return super.createExtractedSuperNameField().apply {
|
||||||
|
document.addDocumentListener(
|
||||||
|
object : DocumentAdapter() {
|
||||||
|
override fun textChanged(e: DocumentEvent?) {
|
||||||
|
resetFileNameField()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createDestinationRootPanel(): JPanel? {
|
||||||
|
if (targetParent !is PsiDirectory) return null
|
||||||
|
|
||||||
|
val targetDirectoryPanel = super.createDestinationRootPanel()
|
||||||
|
val targetFileNamePanel = JPanel(BorderLayout()).apply {
|
||||||
|
border = BorderFactory.createEmptyBorder(10, 0, 0, 0)
|
||||||
|
val label = JBLabel("Target file name:")
|
||||||
|
add(label, BorderLayout.NORTH)
|
||||||
|
label.labelFor = fileNameField
|
||||||
|
add(fileNameField, BorderLayout.CENTER)
|
||||||
|
}
|
||||||
|
|
||||||
|
return FormBuilder
|
||||||
|
.createFormBuilder()
|
||||||
|
.addComponent(targetDirectoryPanel)
|
||||||
|
.addComponent(targetFileNamePanel)
|
||||||
|
.panel
|
||||||
|
}
|
||||||
|
|
||||||
override fun createNorthPanel(): JComponent? {
|
override fun createNorthPanel(): JComponent? {
|
||||||
return super.createNorthPanel().apply {
|
return super.createNorthPanel().apply {
|
||||||
@@ -112,7 +146,7 @@ abstract class KotlinExtractSuperDialogBase(
|
|||||||
override fun init() {
|
override fun init() {
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
fileNameField.text = "$extractedSuperName.${KotlinFileType.EXTENSION}"
|
resetFileNameField()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun preparePackage() {
|
override fun preparePackage() {
|
||||||
|
|||||||
Reference in New Issue
Block a user