1234567891011121314151617181920212223242526272829303132333435363738 |
- package sample.duplicate;
-
- import javassist.tools.reflect.*;
-
- public class DuplicatedObject extends Metaobject {
- private DuplicatedObject backup;
-
- // if a base-level object is created, this metaobject creates
- // a copy of the base-level object.
-
- public DuplicatedObject(Object self, Object[] args) {
- super(self, args);
- ClassMetaobject clazz = getClassMetaobject();
- if (clazz.isInstance(args[0]))
- backup = null; // self is a backup object.
- else {
- Object[] args2 = new Object[1];
- args2[0] = self;
- try {
- Metalevel m = (Metalevel)clazz.newInstance(args2);
- backup = (DuplicatedObject)m._getMetaobject();
- }
- catch (CannotCreateException e) {
- backup = null;
- }
- }
- }
-
- public Object trapMethodcall(int identifier, Object[] args)
- throws Throwable
- {
- Object obj = super.trapMethodcall(identifier, args);
- if (backup != null)
- backup.trapMethodcall(identifier, args);
-
- return obj;
- }
- }
|