#123003 Fix breaking strong mapping between boxes and elements. designer_refactoring2_before_merge editor_settings_90403_before_separation modresource_cache_root
authorpzavadsky@netbeans.org
Fri, 30 Nov 2007 00:49:19 +0000
changeset 1903890d9e8cde03
parent 1902 8a1d7cfaebe1
child 1904 2d827747e5b9
#123003 Fix breaking strong mapping between boxes and elements.
Allowing those to be garbaged once the component is closed.
visualweb.designer/src/org/netbeans/modules/visualweb/designer/WebForm.java
     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.