summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-18 14:35:55 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-18 14:35:55 +0000
commitd83b8c91c908f08a651ee8b7c41ab322be33ca22 (patch)
treeba3eb8364c419054dbc88510867ea6fd332b0908
parent42075d54b02ac1a237b34cea381ad1ff4c856559 (diff)
parent47767d4cd921ef666ce1bdf1e5a372e04e436418 (diff)
downloadintellij-kotlin-d83b8c91c908f08a651ee8b7c41ab322be33ca22.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
-rw-r--r--platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureDialogBase.java10
-rw-r--r--plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt73
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)
}