@@ -86,6 +86,8 @@ public abstract class AbstractWizardNewTypeScriptProjectCreationPage extends Wiz
8686 private Text nodePath ;
8787 private Text nodeVersion ;
8888
89+ private NodeJsStatus nodejsStatus ;
90+
8991 public AbstractWizardNewTypeScriptProjectCreationPage (String pageName , BasicNewResourceWizard wizard ) {
9092 super (pageName );
9193 this .wizard = wizard ;
@@ -189,7 +191,7 @@ private void createEmbeddedNodejsField(Composite parent, IEmbeddedNodejs[] insta
189191 useEmbeddedNodeJsButton = new Button (parent , SWT .RADIO );
190192 useEmbeddedNodeJsButton
191193 .setText (TypeScriptUIMessages .AbstractWizardNewTypeScriptProjectCreationPage_useEmbeddedNodeJs_label );
192- useEmbeddedNodeJsButton .addListener (SWT .Selection , this );
194+ useEmbeddedNodeJsButton .addListener (SWT .Selection , nodeJsStatusChanged () );
193195
194196 embeddedNodeJs = new Combo (parent , SWT .READ_ONLY );
195197 embeddedNodeJs .setLayoutData (new GridData (GridData .FILL_HORIZONTAL ));
@@ -205,7 +207,7 @@ private void createEmbeddedNodejsField(Composite parent, IEmbeddedNodejs[] insta
205207 }
206208 embeddedNodeJs .setItems (valueLabels );
207209 embeddedNodeJs .setFont (JFaceResources .getDialogFont ());
208- embeddedNodeJs .addListener (SWT .Modify , this );
210+ embeddedNodeJs .addListener (SWT .Modify , nodeJsStatusChanged () );
209211 embeddedNodeJs .addModifyListener (new ModifyListener () {
210212
211213 @ Override
@@ -215,19 +217,25 @@ public void modifyText(ModifyEvent e) {
215217 });
216218 }
217219
220+ private Listener nodeJsStatusChanged () {
221+ return (event ) -> {
222+ nodejsStatus = null ;
223+ handleEvent (event );
224+ };
225+ }
226+
218227 /** Creates the field for selecting the installed Node.js. */
219228 private void createInstalledNodejsField (Composite parent ) {
220229 if (hasEmbeddedNodeJs ) {
221230 Button useInstalledNodejs = new Button (parent , SWT .RADIO );
222231 useInstalledNodejs
223232 .setText (TypeScriptUIMessages .AbstractWizardNewTypeScriptProjectCreationPage_useInstalledNodeJs_label );
224- useInstalledNodejs .addListener (SWT .Selection , this );
225233 }
226234 String [] defaultPaths = IDENodejsProcessHelper .getAvailableNodejsPaths ();
227235 installedNodeJs = new Combo (parent , SWT .NONE );
228236 installedNodeJs .setLayoutData (new GridData (GridData .FILL_HORIZONTAL ));
229237 installedNodeJs .setItems (defaultPaths );
230- installedNodeJs .addListener (SWT .Modify , this );
238+ installedNodeJs .addListener (SWT .Modify , nodeJsStatusChanged () );
231239 installedNodeJs .addModifyListener (new ModifyListener () {
232240
233241 @ Override
@@ -357,18 +365,21 @@ protected IStatus validatePageImpl() {
357365 * @return the validation status of the nodejs path.
358366 */
359367 private IStatus validateAndUpdateNodejsPath () {
368+ if (nodejsStatus != null ) {
369+ return nodejsStatus ;
370+ }
360371 // Compute node.j status
361- NodeJsStatus status = validateNodejsPath ();
372+ nodejsStatus = validateNodejsPath ();
362373 // 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 ()));
366377 } else {
367378 nodeVersion .setText ("" );
368379 nodePath .setText ("" );
369380 }
370- nodeJsChanged (status .getNodeFile ());
371- return status ;
381+ nodeJsChanged (nodejsStatus .getNodeFile ());
382+ return nodejsStatus ;
372383 }
373384
374385 /**
0 commit comments