@@ -86,6 +86,8 @@ public abstract class AbstractWizardNewTypeScriptProjectCreationPage extends Wiz
86
86
private Text nodePath ;
87
87
private Text nodeVersion ;
88
88
89
+ private NodeJsStatus nodejsStatus ;
90
+
89
91
public AbstractWizardNewTypeScriptProjectCreationPage (String pageName , BasicNewResourceWizard wizard ) {
90
92
super (pageName );
91
93
this .wizard = wizard ;
@@ -189,7 +191,7 @@ private void createEmbeddedNodejsField(Composite parent, IEmbeddedNodejs[] insta
189
191
useEmbeddedNodeJsButton = new Button (parent , SWT .RADIO );
190
192
useEmbeddedNodeJsButton
191
193
.setText (TypeScriptUIMessages .AbstractWizardNewTypeScriptProjectCreationPage_useEmbeddedNodeJs_label );
192
- useEmbeddedNodeJsButton .addListener (SWT .Selection , this );
194
+ useEmbeddedNodeJsButton .addListener (SWT .Selection , nodeJsStatusChanged () );
193
195
194
196
embeddedNodeJs = new Combo (parent , SWT .READ_ONLY );
195
197
embeddedNodeJs .setLayoutData (new GridData (GridData .FILL_HORIZONTAL ));
@@ -205,7 +207,7 @@ private void createEmbeddedNodejsField(Composite parent, IEmbeddedNodejs[] insta
205
207
}
206
208
embeddedNodeJs .setItems (valueLabels );
207
209
embeddedNodeJs .setFont (JFaceResources .getDialogFont ());
208
- embeddedNodeJs .addListener (SWT .Modify , this );
210
+ embeddedNodeJs .addListener (SWT .Modify , nodeJsStatusChanged () );
209
211
embeddedNodeJs .addModifyListener (new ModifyListener () {
210
212
211
213
@ Override
@@ -215,19 +217,25 @@ public void modifyText(ModifyEvent e) {
215
217
});
216
218
}
217
219
220
+ private Listener nodeJsStatusChanged () {
221
+ return (event ) -> {
222
+ nodejsStatus = null ;
223
+ handleEvent (event );
224
+ };
225
+ }
226
+
218
227
/** Creates the field for selecting the installed Node.js. */
219
228
private void createInstalledNodejsField (Composite parent ) {
220
229
if (hasEmbeddedNodeJs ) {
221
230
Button useInstalledNodejs = new Button (parent , SWT .RADIO );
222
231
useInstalledNodejs
223
232
.setText (TypeScriptUIMessages .AbstractWizardNewTypeScriptProjectCreationPage_useInstalledNodeJs_label );
224
- useInstalledNodejs .addListener (SWT .Selection , this );
225
233
}
226
234
String [] defaultPaths = IDENodejsProcessHelper .getAvailableNodejsPaths ();
227
235
installedNodeJs = new Combo (parent , SWT .NONE );
228
236
installedNodeJs .setLayoutData (new GridData (GridData .FILL_HORIZONTAL ));
229
237
installedNodeJs .setItems (defaultPaths );
230
- installedNodeJs .addListener (SWT .Modify , this );
238
+ installedNodeJs .addListener (SWT .Modify , nodeJsStatusChanged () );
231
239
installedNodeJs .addModifyListener (new ModifyListener () {
232
240
233
241
@ Override
@@ -357,18 +365,21 @@ protected IStatus validatePageImpl() {
357
365
* @return the validation status of the nodejs path.
358
366
*/
359
367
private IStatus validateAndUpdateNodejsPath () {
368
+ if (nodejsStatus != null ) {
369
+ return nodejsStatus ;
370
+ }
360
371
// Compute node.j status
361
- NodeJsStatus status = validateNodejsPath ();
372
+ nodejsStatus = validateNodejsPath ();
362
373
// Update node version & path
363
- if (status .isOK ()) {
364
- nodeVersion .setText (status .getNodeVersion ());
365
- nodePath .setText (FileUtils .getPath (status .getNodeFile ()));
374
+ if (nodejsStatus .isOK ()) {
375
+ nodeVersion .setText (nodejsStatus .getNodeVersion ());
376
+ nodePath .setText (FileUtils .getPath (nodejsStatus .getNodeFile ()));
366
377
} else {
367
378
nodeVersion .setText ("" );
368
379
nodePath .setText ("" );
369
380
}
370
- nodeJsChanged (status .getNodeFile ());
371
- return status ;
381
+ nodeJsChanged (nodejsStatus .getNodeFile ());
382
+ return nodejsStatus ;
372
383
}
373
384
374
385
/**
0 commit comments