/** * Set the name of the class to load. */ private void setClassName(String name, Class wrapper) { if (_invalid) throw new IllegalStateException(); // remember the position of the code iterator Instruction before = (_code.hasNext()) ? _code.next() : null; _code.before(_ins); _code.next(); if (wrapper != null) _code.getstatic().setField(wrapper, "TYPE", Class.class); else setObject(name); // move to the old position if (before != null) _code.before(before); else _code.afterLast(); _invalid = true; }
/** * Set the name of the class to load. */ private void setClassName(String name, Class wrapper) { if (_invalid) throw new IllegalStateException(); // remember the position of the code iterator Instruction before = (_code.hasNext()) ? _code.next() : null; _code.before(_ins); _code.next(); if (wrapper != null) _code.getstatic().setField(wrapper, "TYPE", Class.class); else setObject(name); // move to the old position if (before != null) _code.before(before); else _code.afterLast(); _invalid = true; }
/** * Adds fields and methods as necessary to load a class constant of * an object type. */ private void setObject(String name) { BCField field = addClassField(name); BCMethod method = addClassLoadMethod(); // copied from the way jikes loads classes _code.getstatic().setField(field); JumpInstruction ifnull = _code.ifnull(); _code.getstatic().setField(field); JumpInstruction go2 = _code.go2(); ifnull.setTarget(_code.constant().setValue(name)); _code.invokestatic().setMethod(method); _code.dup(); _code.putstatic().setField(field); go2.setTarget(_code.nop()); }
/** * Adds fields and methods as necessary to load a class constant of * an object type. */ private void setObject(String name) { BCField field = addClassField(name); BCMethod method = addClassLoadMethod(); // copied from the way jikes loads classes _code.getstatic().setField(field); JumpInstruction ifnull = _code.ifnull(); _code.getstatic().setField(field); JumpInstruction go2 = _code.go2(); ifnull.setTarget(_code.constant().setValue(name)); _code.invokestatic().setMethod(method); _code.dup(); _code.putstatic().setField(field); go2.setTarget(_code.nop()); }
/** * Adds a custom readObject method that delegates to the * {@link ObjectInputStream#readObject} method. */ private void modifyReadObjectMethod(BCMethod method, boolean full) { Code code = method.getCode(true); code.beforeFirst(); // if this instance uses synthetic detached state, note that it has // been deserialized if (ClassMetaData.SYNTHETIC.equals(_meta.getDetachedState())) { loadManagedInstance(code, false); code.getstatic().setField(PersistenceCapable.class, "DESERIALIZED", Object.class); code.invokevirtual().setMethod(PRE + "SetDetachedState", void.class, new Class[]{ Object.class }); } if (full) { // in.defaultReadObject (); code.aload().setParam(0); code.invokevirtual().setMethod(ObjectInputStream.class, "defaultReadObject", void.class, null); code.vreturn(); } code.calculateMaxStack(); code.calculateMaxLocals(); }
/** * Adds a custom readObject method that delegates to the * {@link ObjectInputStream#readObject} method. */ private void modifyReadObjectMethod(BCMethod method, boolean full) { Code code = method.getCode(true); code.beforeFirst(); // if this instance uses synthetic detached state, note that it has // been deserialized if (ClassMetaData.SYNTHETIC.equals(_meta.getDetachedState())) { loadManagedInstance(code, false); code.getstatic().setField(PersistenceCapable.class, "DESERIALIZED", Object.class); code.invokevirtual().setMethod(PRE + "SetDetachedState", void.class, new Class[]{ Object.class }); } if (full) { // in.defaultReadObject (); code.aload().setParam(0); code.invokevirtual().setMethod(ObjectInputStream.class, "defaultReadObject", void.class, null); code.vreturn(); } code.calculateMaxStack(); code.calculateMaxLocals(); }
code.getstatic().setField(INHERIT, int.class); code.isub(); code.istore().setLocal(relLocal);
/** * Adds a custom readObject method that delegates to the * {@link ObjectInputStream#readObject} method. */ private void modifyReadObjectMethod(BCMethod method, boolean full) { Code code = method.getCode(true); code.beforeFirst(); // if this instance uses synthetic detached state, note that it has // been deserialized if (ClassMetaData.SYNTHETIC.equals(_meta.getDetachedState())) { loadManagedInstance(code, false); code.getstatic().setField(PersistenceCapable.class, "DESERIALIZED", Object.class); code.invokevirtual().setMethod(PRE + "SetDetachedState", void.class, new Class[]{ Object.class }); } if (full) { // in.defaultReadObject (); code.aload().setParam(0); code.invokevirtual().setMethod(ObjectInputStream.class, "defaultReadObject", void.class, null); code.vreturn(); } code.calculateMaxStack(); code.calculateMaxLocals(); }
/** * Adds a custom readObject method that delegates to the * {@link ObjectInputStream#readObject} method. */ private void modifyReadObjectMethod(BCMethod method, boolean full) { Code code = method.getCode(true); code.beforeFirst(); // if this instance uses synthetic detached state, note that it has // been deserialized if (ClassMetaData.SYNTHETIC.equals(_meta.getDetachedState())) { loadManagedInstance(code, false); code.getstatic().setField(PersistenceCapable.class, "DESERIALIZED", Object.class); code.invokevirtual().setMethod(PRE + "SetDetachedState", void.class, new Class[]{ Object.class }); } if (full) { // in.defaultReadObject (); code.aload().setParam(0); code.invokevirtual().setMethod(ObjectInputStream.class, "defaultReadObject", void.class, null); code.vreturn(); } code.calculateMaxStack(); code.calculateMaxLocals(); }
/** * Adds a custom readObject method that delegates to the * {@link ObjectInputStream#readObject} method. */ private void modifyReadObjectMethod(BCMethod method, boolean full) { Code code = method.getCode(true); code.beforeFirst(); // if this instance uses synthetic detached state, note that it has // been deserialized if (ClassMetaData.SYNTHETIC.equals(_meta.getDetachedState())) { loadManagedInstance(code, false); code.getstatic().setField(PersistenceCapable.class, "DESERIALIZED", Object.class); code.invokevirtual().setMethod(PRE + "SetDetachedState", void.class, new Class[]{ Object.class }); } if (full) { // in.defaultReadObject (); code.aload().setParam(0); code.invokevirtual().setMethod(ObjectInputStream.class, "defaultReadObject", void.class, null); code.vreturn(); } code.calculateMaxStack(); code.calculateMaxLocals(); }
code.getstatic().setField(INHERIT, int.class); code.isub(); code.istore().setLocal(relLocal);
StoreContext.class }); code.areturn(); setTarget(code.getstatic().setField (AbstractPCData.class, "NULL", Object.class), jumps); code.areturn();
StoreContext.class }); code.areturn(); setTarget(code.getstatic().setField (AbstractPCData.class, "NULL", Object.class), jumps); code.areturn();
private void enhanceToData(BCClass bc) { BCMethod meth = bc.declareMethod("toData", Object.class, new Class []{ FieldMetaData.class, Object.class, StoreContext.class }); Code code = meth.getCode(true); // if (fmd.isLRS ())) // return NULL; code.aload().setParam(0); code.invokevirtual().setMethod(FieldMetaData.class, "isLRS", boolean.class, null); JumpInstruction ifins = code.ifeq(); code.getstatic().setField(AbstractPCData.class, "NULL", Object.class); code.areturn(); // super.toData (fmd, val, ctx); ifins.setTarget(code.aload().setThis()); code.aload().setParam(0); code.aload().setParam(1); code.aload().setParam(2); code.invokespecial().setMethod(AbstractPCData.class, "toData", Object.class, new Class[]{ FieldMetaData.class, Object.class, StoreContext.class }); code.areturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
private void enhanceToData(BCClass bc) { BCMethod meth = bc.declareMethod("toData", Object.class, new Class []{ FieldMetaData.class, Object.class, StoreContext.class }); Code code = meth.getCode(true); // if (fmd.isLRS ())) // return NULL; code.aload().setParam(0); code.invokevirtual().setMethod(FieldMetaData.class, "isLRS", boolean.class, null); JumpInstruction ifins = code.ifeq(); code.getstatic().setField(AbstractPCData.class, "NULL", Object.class); code.areturn(); // super.toData (fmd, val, ctx); ifins.setTarget(code.aload().setThis()); code.aload().setParam(0); code.aload().setParam(1); code.aload().setParam(2); code.invokespecial().setMethod(AbstractPCData.class, "toData", Object.class, new Class[]{ FieldMetaData.class, Object.class, StoreContext.class }); code.areturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
private void enhanceToData(BCClass bc) { BCMethod meth = bc.declareMethod("toData", Object.class, new Class []{ FieldMetaData.class, Object.class, StoreContext.class }); Code code = meth.getCode(true); // if (fmd.isLRS ())) // return NULL; code.aload().setParam(0); code.invokevirtual().setMethod(FieldMetaData.class, "isLRS", boolean.class, null); JumpInstruction ifins = code.ifeq(); code.getstatic().setField(AbstractPCData.class, "NULL", Object.class); code.areturn(); // super.toData (fmd, val, ctx); ifins.setTarget(code.aload().setThis()); code.aload().setParam(0); code.aload().setParam(1); code.aload().setParam(2); code.invokespecial().setMethod(AbstractPCData.class, "toData", Object.class, new Class[]{ FieldMetaData.class, Object.class, StoreContext.class }); code.areturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
private void enhanceToData(BCClass bc) { BCMethod meth = bc.declareMethod("toData", Object.class, new Class []{ FieldMetaData.class, Object.class, StoreContext.class }); Code code = meth.getCode(true); // if (fmd.isLRS ())) // return NULL; code.aload().setParam(0); code.invokevirtual().setMethod(FieldMetaData.class, "isLRS", boolean.class, null); JumpInstruction ifins = code.ifeq(); code.getstatic().setField(AbstractPCData.class, "NULL", Object.class); code.areturn(); // super.toData (fmd, val, ctx); ifins.setTarget(code.aload().setThis()); code.aload().setParam(0); code.aload().setParam(1); code.aload().setParam(2); code.invokespecial().setMethod(AbstractPCData.class, "toData", Object.class, new Class[]{ FieldMetaData.class, Object.class, StoreContext.class }); code.areturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
private void enhanceToData(BCClass bc) { BCMethod meth = bc.declareMethod("toData", Object.class, new Class []{ FieldMetaData.class, Object.class, StoreContext.class }); Code code = meth.getCode(true); // if (fmd.isLRS ())) // return NULL; code.aload().setParam(0); code.invokevirtual().setMethod(FieldMetaData.class, "isLRS", boolean.class, null); JumpInstruction ifins = code.ifeq(); code.getstatic().setField(AbstractPCData.class, "NULL", Object.class); code.areturn(); // super.toData (fmd, val, ctx); ifins.setTarget(code.aload().setThis()); code.aload().setParam(0); code.aload().setParam(1); code.aload().setParam(2); code.invokespecial().setMethod(AbstractPCData.class, "toData", Object.class, new Class[]{ FieldMetaData.class, Object.class, StoreContext.class }); code.areturn(); code.calculateMaxStack(); code.calculateMaxLocals(); }
code.getfield().setField(SM, SMTYPE); loadManagedInstance(code, true); code.getstatic().setField(INHERIT, int.class); code.constant().setValue(index); code.iadd();
code.getfield().setField(SM, SMTYPE); loadManagedInstance(code, true, fmd); code.getstatic().setField(INHERIT, int.class); code.constant().setValue(index); code.iadd();