diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-18 14:35:55 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-18 14:35:55 +0000 |
commit | d83b8c91c908f08a651ee8b7c41ab322be33ca22 (patch) | |
tree | ba3eb8364c419054dbc88510867ea6fd332b0908 | |
parent | 42075d54b02ac1a237b34cea381ad1ff4c856559 (diff) | |
parent | 47767d4cd921ef666ce1bdf1e5a372e04e436418 (diff) | |
download | intellij-kotlin-studio-2022.1.1-canary.tar.gz |
Snap for 8962753 from 47767d4cd921ef666ce1bdf1e5a372e04e436418 to studio-ee-releasestudio-2022.1.1-canarystudio-2022.1.1-beta2studio-canarystudio-2022.1.1-canary
Change-Id: Iff61d96d059d8d41d6d12ec6c1598461ce4a0036
2 files changed, 57 insertions, 26 deletions
diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java index f8634b2a63b2..732e14eda5b9 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java @@ -1,4 +1,4 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.refactoring.changeSignature; import com.intellij.icons.AllIcons; @@ -49,6 +49,7 @@ import javax.swing.event.ChangeListener; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableCellEditor; +import javax.swing.table.TableModel; import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; @@ -221,6 +222,7 @@ public abstract class ChangeSignatureDialogBase<ParamInfo extends ParameterInfo, myNameField.setEnabled(myMethod.canChangeName()); if (myMethod.canChangeName()) { myNameField.addDocumentListener(mySignatureUpdater); + Disposer.register(myDisposable, () -> myNameField.removeDocumentListener(mySignatureUpdater)); myNameField.setPreferredWidth(200); } myNamePanel.add(nameLabel, BorderLayout.NORTH); @@ -250,6 +252,7 @@ public abstract class ChangeSignatureDialogBase<ParamInfo extends ParameterInfo, if (myMethod.canChangeReturnType() == MethodDescriptor.ReadWriteOption.ReadWrite) { myReturnTypeField.setPreferredWidth(200); myReturnTypeField.addDocumentListener(mySignatureUpdater); + Disposer.register(myDisposable, () -> myReturnTypeField.removeDocumentListener(mySignatureUpdater)); } else { myReturnTypeField.setEnabled(false); @@ -459,7 +462,9 @@ public abstract class ChangeSignatureDialogBase<ParamInfo extends ParameterInfo, final JPanel buttonsPanel = ToolbarDecorator.createDecorator(myParametersList.getTable()) .addExtraAction(myPropagateParamChangesButton) .createPanel(); - myParametersList.getTable().getModel().addTableModelListener(mySignatureUpdater); + TableModel tableModel = myParametersList.getTable().getModel(); + tableModel.addTableModelListener(mySignatureUpdater); + Disposer.register(myDisposable, () -> tableModel.removeTableModelListener(mySignatureUpdater)); return buttonsPanel; } else { @@ -472,6 +477,7 @@ public abstract class ChangeSignatureDialogBase<ParamInfo extends ParameterInfo, myPropagateParamChangesButton.setVisible(false); myParametersTableModel.addTableModelListener(mySignatureUpdater); + Disposer.register(myDisposable, () -> myParametersTableModel.removeTableModelListener(mySignatureUpdater)); customizeParametersTable(myParametersTable); return buttonsPanel; diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt index 6613663b39f2..1a54ee012093 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt @@ -1,18 +1,18 @@ -// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.refactoring.changeSignature.ui import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer +import com.intellij.openapi.Disposable import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.openapi.editor.colors.EditorFontType -import com.intellij.openapi.editor.event.DocumentEvent -import com.intellij.openapi.editor.event.DocumentListener import com.intellij.openapi.options.ConfigurationException import com.intellij.openapi.project.Project import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.ui.MessageDialogBuilder import com.intellij.openapi.ui.VerticalFlowLayout +import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.NlsContexts import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiCodeFragment @@ -57,8 +57,10 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.isError import java.awt.Font +import java.awt.ItemSelectable import java.awt.Toolkit import java.awt.event.ItemEvent +import java.awt.event.ItemListener import javax.swing.* class KotlinChangeSignatureDialog( @@ -74,6 +76,18 @@ class KotlinChangeSignatureDialog( KotlinMethodDescriptor, ParameterTableModelItemBase<KotlinParameterInfo>, KotlinCallableParameterTableModel>(project, methodDescriptor, false, context) { + + private fun Disposable.whenDisposed(listener: () -> Unit): Disposable = apply { + Disposer.register(this, Disposable { listener() }) + } + + private fun ItemSelectable.addItemListener(parentDisposable: Disposable? = null, listener: ItemListener) { + addItemListener(listener) + parentDisposable?.whenDisposed { + removeItemListener(listener) + } + } + override fun getFileType(): KotlinFileType = KotlinFileType.INSTANCE override fun createParametersInfoModel(descriptor: KotlinMethodDescriptor) = @@ -155,31 +169,43 @@ class KotlinChangeSignatureDialog( component = editor } else if (KotlinCallableParameterTableModel.isDefaultParameterColumn(columnInfo) && isDefaultColumnEnabled()) { defaultParameterCheckbox.isSelected = item.parameter.defaultValue != null - defaultParameterCheckbox.addItemListener { - parametersTableModel.setValueAtWithoutUpdate(it.stateChange == ItemEvent.SELECTED, row, columnFinal) - updateSignature() - } + defaultParameterCheckbox.addItemListener( + disposable, + ItemListener { + parametersTableModel.setValueAtWithoutUpdate(it.stateChange == ItemEvent.SELECTED, row, columnFinal) + updateSignature() + }, + ) + component = defaultParameterCheckbox editor = null notifyReceiverListeners() } else if (KotlinPrimaryConstructorParameterTableModel.isValVarColumn(columnInfo)) { val comboBox = ComboBox(KotlinValVar.values()) comboBox.selectedItem = item.parameter.valOrVar - comboBox.addItemListener { - parametersTableModel.setValueAtWithoutUpdate(it.item, row, columnFinal) - updateSignature() - } + comboBox.addItemListener( + disposable, + ItemListener { + parametersTableModel.setValueAtWithoutUpdate(it.item, row, columnFinal) + updateSignature() + }, + ) + component = comboBox editor = null } else if (KotlinFunctionParameterTableModel.isReceiverColumn(columnInfo)) { val checkBox = JCheckBox() checkBox.isSelected = parametersTableModel.receiver == item.parameter - checkBox.addItemListener { - val newReceiver = if (it.stateChange == ItemEvent.SELECTED) item.parameter else null - (parametersTableModel as KotlinFunctionParameterTableModel).receiver = newReceiver - updateSignature() - notifyReceiverListeners() - } + checkBox.addItemListener( + disposable, + ItemListener { + val newReceiver = if (it.stateChange == ItemEvent.SELECTED) item.parameter else null + (parametersTableModel as KotlinFunctionParameterTableModel).receiver = newReceiver + updateSignature() + notifyReceiverListeners() + }, + ) + component = checkBox editor = null } else @@ -189,13 +215,12 @@ class KotlinChangeSignatureDialog( panel.add(label) if (editor != null) { - editor.addDocumentListener( - object : DocumentListener { - override fun documentChanged(e: DocumentEvent) { - fireDocumentChanged(e, columnFinal) - } - } - ) + val listener = RowEditorChangeListener(columnFinal) + editor.addDocumentListener(listener) + Disposer.register(disposable) { + editor.removeDocumentListener(listener) + } + editor.setPreferredWidth(table.width / parametersTableModel.columnCount) } |