Refactor: Introduce JTextComponent.onTextChange() function

This commit is contained in:
Alexey Sedunov
2018-04-10 14:53:51 +03:00
parent 62f654b3d2
commit e51b6927b6
6 changed files with 44 additions and 41 deletions
@@ -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
@@ -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("&", "");
@@ -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() {
@@ -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() }
}
}
@@ -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)
@@ -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)
}
}
)
}