Bug 381441 - [hotbug] JSFFacetInstallDataModelProvider dispose method
does not remove all listeners it adds
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
index 9fc0b6d..3c57b7f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
@@ -61,6 +61,7 @@
private final boolean jsfFacetConfigurationEnabled = JsfFacetConfigurationUtil.isJsfFacetConfigurationEnabled();
private LibraryInstallDelegate libraryInstallDelegate = null;
+ private IPropertyChangeListener propertyChangeListener=null;
private void initLibraryInstallDelegate()
{
@@ -70,27 +71,36 @@
if( this.libraryInstallDelegate == null && fpjwc != null && fv != null )
{
this.libraryInstallDelegate = new LibraryInstallDelegate( fpjwc, fv );
+ this.propertyChangeListener=new IPropertyChangeListener()
+ {
+ public void propertyChanged( final String property,
+ final Object oldValue,
+ final Object newValue )
+ {
+ final IDataModel dm = getDataModel();
+
+ if( dm != null )
+ {
+ dm.notifyPropertyChange( LIBRARY_PROVIDER_DELEGATE, IDataModel.VALUE_CHG );
+ }
+ }
+
+ };
- this.libraryInstallDelegate.addListener
- (
- new IPropertyChangeListener()
- {
- public void propertyChanged( final String property,
- final Object oldValue,
- final Object newValue )
- {
- final IDataModel dm = getDataModel();
-
- if( dm != null )
- {
- dm.notifyPropertyChange( LIBRARY_PROVIDER_DELEGATE, IDataModel.VALUE_CHG );
- }
- }
- }
- );
+ this.libraryInstallDelegate.addListener(propertyChangeListener);
}
}
+ public void dispose()
+ {
+ if(this.libraryInstallDelegate!=null)
+ {
+ this.libraryInstallDelegate.removeListener(propertyChangeListener);
+ this.libraryInstallDelegate.dispose();
+ }
+ super.dispose();
+ }
+
private String errorMessage;