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.
39 lines
993 B
39 lines
993 B
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;
|
|
}
|
|
}
|