You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DuplicatedObject.java 993B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package sample.duplicate;
  2. import javassist.tools.reflect.*;
  3. public class DuplicatedObject extends Metaobject {
  4. private DuplicatedObject backup;
  5. // if a base-level object is created, this metaobject creates
  6. // a copy of the base-level object.
  7. public DuplicatedObject(Object self, Object[] args) {
  8. super(self, args);
  9. ClassMetaobject clazz = getClassMetaobject();
  10. if (clazz.isInstance(args[0]))
  11. backup = null; // self is a backup object.
  12. else {
  13. Object[] args2 = new Object[1];
  14. args2[0] = self;
  15. try {
  16. Metalevel m = (Metalevel)clazz.newInstance(args2);
  17. backup = (DuplicatedObject)m._getMetaobject();
  18. }
  19. catch (CannotCreateException e) {
  20. backup = null;
  21. }
  22. }
  23. }
  24. public Object trapMethodcall(int identifier, Object[] args)
  25. throws Throwable
  26. {
  27. Object obj = super.trapMethodcall(identifier, args);
  28. if (backup != null)
  29. backup.trapMethodcall(identifier, args);
  30. return obj;
  31. }
  32. }