#123003 Fix breaking strong mapping between boxes and elements.
Allowing those to be garbaged once the component is closed.
1.1 --- a/visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java Thu Nov 29 23:04:26 2007 +0000
1.2 +++ b/visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java Fri Nov 30 00:49:19 2007 +0000
1.3 @@ -72,6 +72,7 @@
1.4 import java.util.List;
1.5 import java.util.Map;
1.6
1.7 +import java.util.WeakHashMap;
1.8 import javax.swing.CellRendererPane;
1.9 import javax.swing.JComponent;
1.10 import javax.swing.event.EventListenerList;
1.11 @@ -596,11 +597,13 @@
1.12 // }
1.13 // #106433 There needs to be 1:N mapping for element : box.
1.14 // TODO Revise potential memory leak, boxes linked to the elements!
1.15 - Map<WebForm, CssBox> webform2box = (Map<WebForm, CssBox>)element.getUserData(KEY_CSS_BOX_MAP);
1.16 + Map<WebForm, WeakReference<CssBox>> webform2box = (Map<WebForm, WeakReference<CssBox>>)element.getUserData(KEY_CSS_BOX_MAP);
1.17 if (webform2box == null) {
1.18 - webform2box = new HashMap<WebForm, CssBox>();
1.19 + // #123003 Avoiding possible leak, the insync FacesModel
1.20 + // is not garbaged unless the project is closed.
1.21 + webform2box = new WeakHashMap<WebForm, WeakReference<CssBox>>();
1.22 }
1.23 - webform2box.put(this, box);
1.24 + webform2box.put(this, new WeakReference<CssBox>(box));
1.25 element.setUserData(KEY_CSS_BOX_MAP, webform2box, CssBoxDataHandler.getDefault());
1.26 }
1.27
1.28 @@ -611,8 +614,10 @@
1.29 if (element == null) {
1.30 return null;
1.31 }
1.32 - Map<WebForm, CssBox> webform2box = (Map<WebForm, CssBox>)element.getUserData(KEY_CSS_BOX_MAP);
1.33 - return webform2box == null ? null : webform2box.get(this);
1.34 + Map<WebForm, WeakReference<CssBox>> webform2box = (Map<WebForm, WeakReference<CssBox>>)element.getUserData(KEY_CSS_BOX_MAP);
1.35 +// return webform2box == null ? null : webform2box.get(this);
1.36 + WeakReference<CssBox> cssBoxWRef = webform2box == null ? null : webform2box.get(this);
1.37 + return cssBoxWRef == null ? null : cssBoxWRef.get();
1.38 }
1.39
1.40 // XXX Temporary, see DesignerService.copyBoxForElement.