its easy to enable detaching of any IDetachable field rather then only IModel. this code can also walk behaviors, but i dont think it should go beyond that. walking the entire object graph will be too expensive. right now it performs a lot of caching which makes it work well.
-igor On Fri, Apr 6, 2012 at 10:48 AM, Dan Retzlaff <dretzl...@gmail.com> wrote: > Sorry to double-post, but I realized it's trivial to visit the object graph > since local final variables show up as fields in the inner class. This > following snippet prints "detaching". So what do you think about > generalizing the automatic detach to all objects, not just components? > > final IModel model = new IModel() { > @Override > public Object getObject() { > return null; > } > @Override > public void setObject(Object object) { > } > @Override > public void detach() { > System.out.println("detaching"); > } > }; > Object object = new Object() { > public void method() { > System.out.println(model.getObject()); > } > }; > for (Field f : object.getClass().getDeclaredFields()) { > System.out.println(f.getName()); > if (IModel.class.isAssignableFrom(f.getType())) { > f.setAccessible(true); > ((IModel)f.get(object)).detach(); > } > } > > On Fri, Apr 6, 2012 at 11:26 AM, Dan Retzlaff <dretzl...@gmail.com> wrote: > >> I wish there were a way to apply this strategy to the whole object graph >> (not just fields). I use local final LoadableDetachableModels on occasion, >> and it'd be nice for those to magically detach too. I'm +0. >> >> Just got Calc-Eric's message. Looks like we're on the same page. >> >> >> On Fri, Apr 6, 2012 at 10:42 AM, Igor Vaynberg >> <igor.vaynb...@gmail.com>wrote: >> >>> i wrote a IDetachListener that automatically detaches any IModel >>> fields found on components. is this something we would be interested >>> in for core? its been running in production for a while without any >>> noticeable overhead and its nice not to have to implemenet onDetach() >>> all the time just to forward it to secondary models. the only downside >>> is that once we introduce this feature we can never remote it because >>> doing so will break code. >>> >>> thoughts? >>> >>> -igor >>> >> >>