Skip to content

Commit 85efda2

Browse files
Merge pull request #6095 from microsoft/fix-dialog-dispose
fix npe when open connector dialog
2 parents cc50ecd + 68a50a8 commit 85efda2

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/AzureDialog.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
*/
55
package com.microsoft.azure.toolkit.intellij.common;
66

7-
import com.intellij.openapi.Disposable;
87
import com.intellij.openapi.project.Project;
98
import com.intellij.openapi.ui.DialogWrapper;
109
import com.intellij.openapi.ui.ValidationInfo;
11-
import com.intellij.openapi.util.Disposer;
1210
import com.microsoft.azure.toolkit.lib.common.form.AzureForm;
13-
import com.microsoft.azure.toolkit.lib.common.form.AzureFormInput;
1411
import com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo;
1512
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
1613
import lombok.extern.java.Log;
@@ -35,16 +32,6 @@ public AzureDialog() {
3532
this(null);
3633
}
3734

38-
@Override
39-
protected void init() {
40-
super.init();
41-
for (final AzureFormInput<?> input : this.getForm().getInputs()) {
42-
if (input instanceof Disposable) {
43-
Disposer.register(this.getDisposable(), (Disposable) input);
44-
}
45-
}
46-
}
47-
4835
@Override
4936
protected void doOKAction() {
5037
try {

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-lib/src/main/java/com/microsoft/azure/toolkit/intellij/common/AzureFormInputComponent.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,20 @@
88
import com.intellij.openapi.Disposable;
99
import com.intellij.openapi.ui.ComponentValidator;
1010
import com.intellij.openapi.ui.ValidationInfo;
11+
import com.intellij.openapi.util.Disposer;
1112
import com.microsoft.azure.toolkit.lib.common.form.AzureFormInput;
1213
import com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo;
1314
import com.microsoft.azure.toolkit.lib.common.task.AzureTaskManager;
1415

1516
import javax.accessibility.AccessibleRelation;
1617
import javax.annotation.Nullable;
1718
import javax.swing.*;
19+
import java.awt.event.WindowAdapter;
20+
import java.awt.event.WindowEvent;
1821
import java.util.Objects;
1922
import java.util.Optional;
2023

21-
import static com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo.Type.PENDING;
22-
import static com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo.Type.SUCCESS;
23-
import static com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo.Type.WARNING;
24+
import static com.microsoft.azure.toolkit.lib.common.form.AzureValidationInfo.Type.*;
2425

2526
public interface AzureFormInputComponent<T> extends AzureFormInput<T>, Disposable {
2627
default JComponent getInputComponent() {
@@ -44,7 +45,16 @@ default void setValidationInfo(@Nullable AzureValidationInfo vi) {
4445
input.revalidate();
4546
input.repaint();
4647
// see com.intellij.openapi.ui.DialogWrapper.setErrorInfoAll
47-
final ComponentValidator v = ComponentValidator.getInstance(input).orElseGet(() -> (new ComponentValidator(this)).installOn(input));
48+
final ComponentValidator v = ComponentValidator.getInstance(input).orElseGet(() -> {
49+
Optional.ofNullable(SwingUtilities.getWindowAncestor(this.getInputComponent()))
50+
.ifPresent(w -> w.addWindowListener(new WindowAdapter() {
51+
@Override
52+
public void windowClosed(WindowEvent e) {
53+
Disposer.dispose(AzureFormInputComponent.this);
54+
}
55+
}));
56+
return new ComponentValidator(AzureFormInputComponent.this).installOn(input);
57+
});
4858
if (v != null) {
4959
AzureTaskManager.getInstance().runLater(() -> v.updateInfo(info));
5060
}

0 commit comments

Comments
 (0)