[357560] DataModelFacetCreationWizardPage creates listeners that are not cleaned up in the dispose method
diff --git a/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/wizards/DataModelFacetCreationWizardPage.java b/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/wizards/DataModelFacetCreationWizardPage.java index 4289878..4aa87c5 100644 --- a/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/wizards/DataModelFacetCreationWizardPage.java +++ b/plugins/org.eclipse.wst.web.ui/static_web_ui/org/eclipse/wst/web/ui/internal/wizards/DataModelFacetCreationWizardPage.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2009 IBM Corporation and others. + * Copyright (c) 2003, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -80,6 +80,8 @@ protected WorkingSetGroup workingSetGroup; + private List<IFacetedProjectListener> facetedProjectListeners = new ArrayList<IFacetedProjectListener>(); + protected Set<IProjectFacetVersion> getFacetConfiguration( final IProjectFacetVersion primaryFacetVersion ) { final Set<IProjectFacetVersion> config = new HashSet<IProjectFacetVersion>(); @@ -194,7 +196,7 @@ } ); - fpjwc.addListener(new IFacetedProjectListener() { + IFacetedProjectListener fpjwcListenerForPrimaryFacetCombo = new IFacetedProjectListener() { public void handleEvent(IFacetedProjectEvent event) { if(event.getType() == IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED){ //this block is to update the combo when the underlying facet version changes @@ -234,7 +236,9 @@ } } - }, IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED, IFacetedProjectEvent.Type.PRIMARY_RUNTIME_CHANGED); + }; + this.facetedProjectListeners.add(fpjwcListenerForPrimaryFacetCombo); + fpjwc.addListener(fpjwcListenerForPrimaryFacetCombo, IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED, IFacetedProjectEvent.Type.PRIMARY_RUNTIME_CHANGED); } protected IProjectFacet getPrimaryFacet() @@ -335,17 +339,15 @@ final IFilter<IPreset> filter = new AbstractFilter<IPreset>() { { - fpjwc.addListener - ( - new IFacetedProjectListener() - { - public void handleEvent( final IFacetedProjectEvent event ) - { - handleProjectFacetsChangedEvent( (IProjectFacetsChangedEvent) event ); - } - }, - IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED - ); + IFacetedProjectListener fpjwcListenerForPreset = new IFacetedProjectListener() + { + public void handleEvent( final IFacetedProjectEvent event ) + { + handleProjectFacetsChangedEvent( (IProjectFacetsChangedEvent) event ); + } + }; + facetedProjectListeners.add(fpjwcListenerForPreset); + fpjwc.addListener(fpjwcListenerForPreset, IFacetedProjectEvent.Type.PROJECT_FACETS_CHANGED ); } public boolean check( final IPreset preset ) @@ -548,6 +550,11 @@ projectNameGroup.dispose(); this.fpjwc.removeListener( this.fpjwcListener ); + for (IFacetedProjectListener listener:this.facetedProjectListeners){ + fpjwc.removeListener(listener); + } + model = null; + } @Override