From c23c16f1a3ce7a10d102a70d956cba9965c481c2 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 12 Oct 2016 11:24:17 +0300 Subject: [PATCH] Extract Superclass/Interface: Add filename field to the dialog --- .../ui/KotlinExtractSuperDialogBase.kt | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt index dd958bacda4..6c3ef3c70f2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractClass/ui/KotlinExtractSuperDialogBase.kt @@ -24,6 +24,9 @@ import com.intellij.refactoring.classMembers.MemberInfoChange import com.intellij.refactoring.extractSuperclass.JavaExtractSuperBaseDialog import com.intellij.refactoring.util.DocCommentPolicy 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.unwrapped 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.KtNamedDeclaration import java.awt.BorderLayout -import javax.swing.Box -import javax.swing.JComponent -import javax.swing.JPanel -import javax.swing.JTextField +import javax.swing.* +import javax.swing.event.DocumentEvent abstract class KotlinExtractSuperDialogBase( protected val originalClass: KtClassOrObject, @@ -71,6 +72,10 @@ abstract class KotlinExtractSuperDialogBase( val targetFileName: String get() = fileNameField.text + private fun resetFileNameField() { + fileNameField.text = "$extractedSuperName.${KotlinFileType.EXTENSION}" + } + protected abstract fun createMemberInfoModel(): MemberInfoModelBase override fun getDocCommentPanelName() = "KDoc for abstracts" @@ -79,7 +84,36 @@ abstract class KotlinExtractSuperDialogBase( 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? { return super.createNorthPanel().apply { @@ -112,7 +146,7 @@ abstract class KotlinExtractSuperDialogBase( override fun init() { super.init() - fileNameField.text = "$extractedSuperName.${KotlinFileType.EXTENSION}" + resetFileNameField() } override fun preparePackage() {