From e51b6927b653be73406c35fea57f9cb9d4874994 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 10 Apr 2018 14:53:51 +0300 Subject: [PATCH] Refactor: Introduce JTextComponent.onTextChange() function --- .../dialog/AddFieldBreakpointDialog.java | 16 ++++++++------- .../idea/framework/ui/CopyIntoPanel.java | 16 ++++++++------- .../idea/facet/KotlinFacetEditorGeneralTab.kt | 11 ++-------- .../ui/KotlinExtractSuperDialogBase.kt | 11 ++-------- ...KotlinAwareMoveFilesOrDirectoriesDialog.kt | 11 ++-------- .../org/jetbrains/kotlin/idea/util/uiUtil.kt | 20 +++++++++++++++++++ 6 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/util/uiUtil.kt diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/breakpoints/dialog/AddFieldBreakpointDialog.java b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/breakpoints/dialog/AddFieldBreakpointDialog.java index 4c71e2a35d0..8e84ef9ad11 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/breakpoints/dialog/AddFieldBreakpointDialog.java +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/breakpoints/dialog/AddFieldBreakpointDialog.java @@ -25,9 +25,10 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.ui.DocumentAdapter; +import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject; +import org.jetbrains.kotlin.idea.util.UiUtilKt; import org.jetbrains.kotlin.psi.KtProperty; import javax.swing.*; @@ -51,12 +52,13 @@ public abstract class AddFieldBreakpointDialog extends DialogWrapper { @Override protected JComponent createCenterPanel() { - myClassChooser.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { - @Override - public void textChanged(DocumentEvent event) { - updateUI(); - } - }); + UiUtilKt.onTextChange( + myClassChooser.getTextField(), + (DocumentEvent e) -> { + updateUI(); + return Unit.INSTANCE; + } + ); myClassChooser.addActionListener(new ActionListener() { @Override diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/CopyIntoPanel.java b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/CopyIntoPanel.java index b88edd737cd..e2bc31afaf7 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/CopyIntoPanel.java +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/ui/CopyIntoPanel.java @@ -19,11 +19,12 @@ package org.jetbrains.kotlin.idea.framework.ui; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; -import com.intellij.ui.DocumentAdapter; import com.intellij.ui.JBColor; import com.intellij.util.EventDispatcher; +import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.idea.util.UiUtilKt; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -46,12 +47,13 @@ public class CopyIntoPanel { copyIntoField.addBrowseFolderListener( "Copy Into...", "Choose folder where files will be copied", project, FileChooserDescriptorFactory.createSingleFolderDescriptor()); - copyIntoField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { - @Override - protected void textChanged(DocumentEvent e) { - updateComponents(); - } - }); + UiUtilKt.onTextChange( + copyIntoField.getTextField(), + (DocumentEvent e) -> { + updateComponents(); + return Unit.INSTANCE; + } + ); if (labelText != null) { String text = labelText.replace("&", ""); diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt index 1eb64802586..12856b93bf3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.facet import com.intellij.facet.ui.* import com.intellij.ide.actions.ShowSettingsUtilImpl import com.intellij.openapi.project.Project -import com.intellij.ui.DocumentAdapter import com.intellij.ui.HoverHyperlinkLabel import com.intellij.util.ui.FormBuilder import com.intellij.util.ui.ThreeStateCheckBox @@ -29,10 +28,10 @@ import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.config.createCompilerArguments import org.jetbrains.kotlin.config.splitArgumentString import org.jetbrains.kotlin.idea.compiler.configuration.* +import org.jetbrains.kotlin.idea.util.onTextChange import java.awt.BorderLayout import javax.swing.* import javax.swing.border.EmptyBorder -import javax.swing.event.DocumentEvent import kotlin.reflect.full.findAnnotation class KotlinFacetEditorGeneralTab( @@ -241,13 +240,7 @@ class KotlinFacetEditorGeneralTab( } private fun JTextField.validateOnChange() { - document.addDocumentListener( - object : DocumentAdapter() { - override fun textChanged(e: DocumentEvent) { - doValidate() - } - } - ) + onTextChange { doValidate() } } private fun AbstractButton.validateOnChange() { 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 46b37ea2a07..9470d6de9f9 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,7 +24,6 @@ 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 @@ -35,6 +34,7 @@ import org.jetbrains.kotlin.idea.refactoring.introduce.extractClass.ExtractSuper import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinMemberInfo import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinMemberSelectionPanel import org.jetbrains.kotlin.idea.refactoring.memberInfo.KotlinUsesAndInterfacesDependencyMemberInfoModel +import org.jetbrains.kotlin.idea.util.onTextChange import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -42,7 +42,6 @@ import org.jetbrains.kotlin.psi.psiUtil.isIdentifier import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded import java.awt.BorderLayout import javax.swing.* -import javax.swing.event.DocumentEvent abstract class KotlinExtractSuperDialogBase( protected val originalClass: KtClassOrObject, @@ -102,13 +101,7 @@ abstract class KotlinExtractSuperDialogBase( override fun createExtractedSuperNameField(): JTextField { return super.createExtractedSuperNameField().apply { - document.addDocumentListener( - object : DocumentAdapter() { - override fun textChanged(e: DocumentEvent?) { - resetFileNameField() - } - } - ) + onTextChange { resetFileNameField() } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/KotlinAwareMoveFilesOrDirectoriesDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/KotlinAwareMoveFilesOrDirectoriesDialog.kt index db82db238ed..efdb4e51d7f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/KotlinAwareMoveFilesOrDirectoriesDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/ui/KotlinAwareMoveFilesOrDirectoriesDialog.kt @@ -24,7 +24,6 @@ import com.intellij.psi.* import com.intellij.refactoring.RefactoringBundle import com.intellij.refactoring.copy.CopyFilesOrDirectoriesDialog import com.intellij.refactoring.util.CommonRefactoringUtil -import com.intellij.ui.DocumentAdapter import com.intellij.ui.NonFocusableCheckBox import com.intellij.ui.RecentsManager import com.intellij.ui.TextFieldWithHistoryWithBrowseButton @@ -36,10 +35,10 @@ import org.jetbrains.kotlin.idea.core.packageMatchesDirectory import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot import org.jetbrains.kotlin.idea.util.application.executeCommand import org.jetbrains.kotlin.idea.util.application.runWriteAction +import org.jetbrains.kotlin.idea.util.onTextChange import org.jetbrains.kotlin.psi.KtFile import java.io.File import javax.swing.JComponent -import javax.swing.event.DocumentEvent class KotlinAwareMoveFilesOrDirectoriesDialog( private val project: Project, @@ -88,13 +87,7 @@ class KotlinAwareMoveFilesOrDirectoriesDialog( TextComponentAccessor.TEXT_FIELD_WITH_HISTORY_WHOLE_TEXT) val textField = targetDirectoryField.childComponent.textEditor FileChooserFactory.getInstance().installFileCompletion(textField, descriptor, true, disposable) - textField.document.addDocumentListener( - object : DocumentAdapter() { - override fun textChanged(e: DocumentEvent) { - validateOKButton() - } - } - ) + textField.onTextChange { validateOKButton() } targetDirectoryField.setTextFieldPreferredWidth(CopyFilesOrDirectoriesDialog.MAX_PATH_LENGTH) Disposer.register(disposable, targetDirectoryField) diff --git a/idea/src/org/jetbrains/kotlin/idea/util/uiUtil.kt b/idea/src/org/jetbrains/kotlin/idea/util/uiUtil.kt new file mode 100644 index 00000000000..d3601f98231 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/util/uiUtil.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.util + +import com.intellij.ui.DocumentAdapter +import javax.swing.event.DocumentEvent +import javax.swing.text.JTextComponent + +fun JTextComponent.onTextChange(action: (DocumentEvent) -> Unit) { + document.addDocumentListener( + object : DocumentAdapter() { + override fun textChanged(e: DocumentEvent) { + action(e) + } + } + ) +} \ No newline at end of file