diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/AbstractSystemWizardPage.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/AbstractSystemWizardPage.java index fcf7386acf3..5a4fcef33a3 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/AbstractSystemWizardPage.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/AbstractSystemWizardPage.java @@ -228,6 +228,18 @@ public abstract class AbstractSystemWizardPage // ----------------------- // PARENT-OVERRIDE METHODS // ----------------------- + + public void dispose() { + super.dispose(); + + // Once the page is disposed, the widgets are not longer accessible + msgLine = null; + input = null; + parentComposite = null; + pendingMessage = null; + pendingErrorMessage = null; + } + /** * Parent override.
* Creates the wizard's UI component. @@ -301,7 +313,7 @@ public abstract class AbstractSystemWizardPage */ public void clearErrorMessage() { - if (msgLine!=null) + if (msgLine!=null && !msgLine.isDisposed()) msgLine.clearErrorMessage(); } @@ -311,7 +323,7 @@ public abstract class AbstractSystemWizardPage */ public void clearMessage() { - if (msgLine!=null) + if (msgLine!=null && !msgLine.isDisposed()) msgLine.clearMessage(); } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEAbstractNewConnectionWizard.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEAbstractNewConnectionWizard.java index 2ec19f6683d..298deebddb5 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEAbstractNewConnectionWizard.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEAbstractNewConnectionWizard.java @@ -40,6 +40,14 @@ public abstract class RSEAbstractNewConnectionWizard extends Wizard implements I isBusy = false; } + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.Wizard#dispose() + */ + public void dispose() { + super.dispose(); + systemType = null; + } + /* (non-Javadoc) * @see org.eclipse.rse.ui.wizards.IRSENewConnectionWizardDelegate#getSystemType() */ diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java index 212abda4270..e5d5c455461 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEDefaultNewConnectionWizard.java @@ -69,6 +69,24 @@ public class RSEDefaultNewConnectionWizard extends RSEAbstractNewConnectionWizar activeProfileNames = SystemStartHere.getSystemProfileManager().getActiveSystemProfileNames(); } + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.Wizard#dispose() + */ + public void dispose() { + super.dispose(); + + mainPage = null; + subsystemFactorySuppliedWizardPages = null; + ssfWizardPagesPerSystemType.clear(); + defaultUserId = null; + defaultHostName = null; + defaultConnectionName = null; + activeProfileNames = null; + privateProfileIndex = -1; + privateProfile = null; + currentlySelectedConnection = null; + } + /* (non-Javadoc) * @see org.eclipse.rse.ui.wizards.AbstractNewConnectionWizard#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java index b103b357946..7b9e695beef 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/newconnection/RSEMainNewConnectionWizard.java @@ -51,7 +51,7 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS private IRSESystemType selectedSystemType; private boolean selectedWizardCanFinishEarly; - private final RSENewConnectionWizardSelectionPage mainPage; + private RSENewConnectionWizardSelectionPage mainPage; private final List initializedWizards = new LinkedList(); private final List selectionChangedListener = new LinkedList(); @@ -80,7 +80,23 @@ public class RSEMainNewConnectionWizard extends Wizard implements INewWizard, IS // and finally restore the wizard state restoreFromDialogSettings(); } - + + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.Wizard#dispose() + */ + public void dispose() { + super.dispose(); + + selectedWizard = null; + selectedSystemType = null; + selectedWizardCanFinishEarly = false; + mainPage = null; + initializedWizards.clear(); + selectionChangedListener.clear(); + restrictedSystemTypes = null; + onlySystemType = false; + } + /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#getDefaultPageImage() */ diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java index 7edec5077b3..2a12da099a5 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/wizards/registries/RSEWizardDescriptor.java @@ -33,17 +33,34 @@ public class RSEWizardDescriptor extends RSEWizardRegistryElement implements IRS */ public RSEWizardDescriptor(RSEAbstractWizardRegistry wizardRegistry, IConfigurationElement element) { super(wizardRegistry, element); - - // Try to instanciate the wizard. - try { - wizard = (IWizard)element.createExecutableExtension("class"); //$NON-NLS-1$ - } catch (CoreException e) { - String message = "RSE new connection wizard failed creation (plugin: {0}, id: {1})."; //$NON-NLS-1$ - message = MessageFormat.format(message, new Object[] { element.getContributor().getName(), element.getDeclaringExtension().getSimpleIdentifier()}); - RSECorePlugin.getDefault().getLogger().logError(message, e); - } + internalGetWizard(); } - + + /** + * Internal method. Returns the wizard instance or create a new one + * if the wizard had been disposed before. + * + * @return The wizard instance to use. + */ + private IWizard internalGetWizard() { + if (wizard == null + || (wizard != null && wizard.getStartingPage() != null + && wizard.getStartingPage().getControl() != null + && wizard.getStartingPage().getControl().isDisposed())) { + // Try to instanciate the wizard. + IConfigurationElement element = getConfigurationElement(); + try { + wizard = (IWizard)element.createExecutableExtension("class"); //$NON-NLS-1$ + } catch (CoreException e) { + String message = "RSE new connection wizard failed creation (plugin: {0}, id: {1})."; //$NON-NLS-1$ + message = MessageFormat.format(message, new Object[] { element.getContributor().getName(), element.getDeclaringExtension().getSimpleIdentifier()}); + RSECorePlugin.getDefault().getLogger().logError(message, e); + } + } + + return wizard; + } + /* (non-Javadoc) * @see org.eclipse.rse.ui.wizards.registries.IWizardDescriptor#isValid() */ @@ -55,7 +72,7 @@ public class RSEWizardDescriptor extends RSEWizardRegistryElement implements IRS * @see org.eclipse.rse.ui.wizards.registries.IWizardDescriptor#getWizard() */ public IWizard getWizard() { - return wizard; + return internalGetWizard(); } /* (non-Javadoc)