All,
Due to a bug in a library I'm using, I need to override the dispose() method on all objects extending a certain class and make it a NO-OP. I know that if I'm making new instances of the classes directly, this is easy to do:
layerManager = new LayerManagerLayer(wwd) {
@Override
public void dispose() {}
};
The problem is that a lot of the object instances I get are not directly constructed by my client code, but instead are created via static library method calls.
// Here I want to override the dispose method, but I cannot.
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource("polylines10.shp"));
Is there a way I can inject my dispose method into that statically created object without modifying the original sourcecode?
If client compiles his own code, You can use AspectJ to inject Your around dispose() method. Other options are some bytecode modification tools like cglib. Look at this list: http://java-source.net/open-source/bytecode-libraries