Skip to content

Commit f2fbfe1

Browse files
committed
2490: Refactor dialog actions to run within WriteAction context
Updated dialog action methods from `onOK` to `onWriteActionOK` and ensured execution through a centralized `executeOnOk` method. This improves thread safety by enforcing operations within the IDE's `WriteAction` context. Also added handling for exceptions during execution and support for dumb mode in `NewModuleFileGroup`.
1 parent c8277f2 commit f2fbfe1

34 files changed

+109
-33
lines changed

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/AbstractDialog.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package com.magento.idea.magento2plugin.actions.generation.dialog;
77

8+
import com.intellij.openapi.application.WriteAction;
89
import com.intellij.openapi.util.Pair;
910
import com.magento.idea.magento2plugin.actions.generation.data.ui.ComboBoxItemData;
1011
import com.magento.idea.magento2plugin.actions.generation.dialog.prompt.PlaceholderInitializerUtil;
@@ -75,6 +76,43 @@ protected void exit() {
7576
dispose();
7677
}
7778

79+
/**
80+
* Executes onOK within a WriteAction context.
81+
*/
82+
protected final void executeOnOk() {
83+
WriteAction.run(() -> {
84+
try {
85+
onWriteActionOK();
86+
} catch (Exception e) {
87+
handleOnOkException(e);
88+
}
89+
});
90+
}
91+
92+
/**
93+
* This method should contain the core logic for onOk.
94+
* Subclasses can override to provide their implementation.
95+
* Must be invoked via executeOnOk().
96+
*/
97+
protected abstract void onWriteActionOK();
98+
99+
/**
100+
* Handle any exceptions that are thrown during execution of the onOK logic.
101+
* Default implementation logs or shows the exception.
102+
*
103+
* @param e the exception encountered
104+
*/
105+
protected void handleOnOkException(Exception e) {
106+
e.printStackTrace();
107+
}
108+
109+
/**
110+
* Hook executed when the OK button is pressed.
111+
*/
112+
protected final void onOK() {
113+
executeOnOk();
114+
}
115+
78116
/**
79117
* Validate all form fields.
80118
*

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAPluginDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ private void fillTargetAreaOptions() {
170170
}
171171
}
172172

173-
protected void onOK() {
173+
protected void onWriteActionOK() {
174+
174175
if (targetMethod == null) {
175176
targetMethod = getSelectedTargetMethod();
176177
}

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/CreateAnObserverDialog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ private void fillTargetAreaOptions() {
149149
/**
150150
* Perform code generation using input data.
151151
*/
152-
private void onOK() {
152+
protected void onWriteActionOK() {
153153
if (validateFormFields()) {
154154
new ObserverClassGenerator(new ObserverFileData(
155155
getObserverDirectory(),

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/GatherArrayValuesDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ public static void open(
114114
/**
115115
* Fire process if all fields are valid.
116116
*/
117-
private void onOK() {
117+
protected void onWriteActionOK() {
118+
118119
if (itemsTable.isEditing()) {
119120
itemsTable.getCellEditor().stopCellEditing();
120121
}

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ protected void updateArgumentText() {
136136
);
137137
}
138138

139-
protected void onOK() {
139+
protected void onWriteActionOK() {
140+
140141
if (!validateFormFields()) {
141142
exit();
142143
return;

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/NewArgumentInjectionDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ public static void open(
363363
/**
364364
* Fire generation process if all fields are valid.
365365
*/
366-
private void onOK() {
366+
protected void onWriteActionOK() {
367+
367368
if (validateFormFields()) {
368369
final DiArgumentData data = getDialogDataObject();
369370

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/NewBlockDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ public static void open(final Project project, final PsiDirectory directory) {
111111
dialog.setVisible(true);
112112
}
113113

114-
protected void onOK() {
114+
protected void onWriteActionOK() {
115+
115116
if (validateFormFields()) {
116117
generateFile();
117118
exit();

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/NewCLICommandDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,8 @@ public String getCLICommandClassFqn() {
190190
return namespaceBuilder.getClassFqn();
191191
}
192192

193-
private void onOK() {
193+
protected void onWriteActionOK() {
194+
194195
if (validateFormFields() && isPHPClassValid()) {
195196
this.generate();
196197
exit();

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/NewControllerDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ public static void open(final Project project, final PsiDirectory directory) {
198198
dialog.setVisible(true);
199199
}
200200

201-
private void onOK() {
201+
protected void onWriteActionOK() {
202+
202203
if (validateFormFields()) {
203204
generateFile();
204205
exit();

src/main/java/com/magento/idea/magento2plugin/actions/generation/dialog/NewCronGroupDialog.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ public static void open(final Project project, final PsiDirectory directory) {
141141
dialog.setVisible(true);
142142
}
143143

144-
private void onOK() {
144+
protected void onWriteActionOK() {
145+
145146
if (validateFormFields()) {
146147
generateFile();
147148
exit();

0 commit comments

Comments
 (0)