Refine search
/** * Add the {@link Instruction}s to load the instance to modify onto the * stack, and return it. If <code>forStatic</code> is set, then * <code>code</code> is in an accessor method or another static method; * otherwise, it is in one of the PC-specified methods. * * @return the first instruction added to <code>code</code>. */ private Instruction loadManagedInstance(Code code, boolean forStatic) { if (_meta.getAccessType() == ClassMetaData.ACCESS_FIELD && forStatic) return code.aload().setParam(0); return code.aload().setThis(); }
private void addNotifyAccess(Code code, FieldMetaData fmd) { // PCHelper.accessingField(this, <absolute-index>); code.aload().setThis(); code.constant().setValue(fmd.getIndex()); code.invokestatic().setMethod(RedefinitionHelper.class, "accessingField", void.class, new Class[] { Object.class, int.class }); }
/** * Convenience method to add a default constructor to this class. * If a default constructor already exists, this method will return it * without modification. * This method can only be called if the superclass has been set. * * @return the default constructor */ public BCMethod addDefaultConstructor() { BCMethod method = getDeclaredMethod("<init>", (String[]) null); if (method != null) return method; method = declareMethod("<init>", void.class, null); Code code = method.getCode(true); code.setMaxStack(1); code.setMaxLocals(1); code.xload().setThis(); code.invokespecial() .setMethod(getSuperclassName(), "<init>", "void", null); code.vreturn(); return method; }
private void addNotifyAccess(Code code, FieldMetaData fmd) { // PCHelper.accessingField(this, <absolute-index>); code.aload().setThis(); code.constant().setValue(fmd.getIndex()); code.invokestatic().setMethod(RedefinitionHelper.class, "accessingField", void.class, new Class[] { Object.class, int.class }); }
/** * Add the {@link Instruction}s to load the instance to modify onto the * stack, and return it. If <code>forStatic</code> is set, then * <code>code</code> is in an accessor method or another static method; * otherwise, it is in one of the PC-specified methods. * * @return the first instruction added to <code>code</code>. */ private Instruction loadManagedInstance(Code code, boolean forStatic, FieldMetaData fmd) { if (forStatic && isFieldAccess(fmd)) return code.aload().setParam(0); return code.aload().setThis(); }
/** * Convenience method to add a default constructor to this class. * If a default constructor already exists, this method will return it * without modification. * This method can only be called if the superclass has been set. * * @return the default constructor */ public BCMethod addDefaultConstructor() { BCMethod method = getDeclaredMethod("<init>", (String[]) null); if (method != null) return method; method = declareMethod("<init>", void.class, null); Code code = method.getCode(true); code.setMaxStack(1); code.setMaxLocals(1); code.xload().setThis(); code.invokespecial() .setMethod(getSuperclassName(), "<init>", "void", null); code.vreturn(); return method; }
private void addNotifyAccess(Code code, FieldMetaData fmd) { // PCHelper.accessingField(this, <absolute-index>); code.aload().setThis(); code.constant().setValue(fmd.getIndex()); code.invokestatic().setMethod(RedefinitionHelper.class, "accessingField", void.class, new Class[] { Object.class, int.class }); }
/** * Add the {@link Instruction}s to load the instance to modify onto the * stack, and return it. If <code>forStatic</code> is set, then * <code>code</code> is in an accessor method or another static method; * otherwise, it is in one of the PC-specified methods. * * @return the first instruction added to <code>code</code>. */ private Instruction loadManagedInstance(Code code, boolean forStatic, FieldMetaData fmd) { if (forStatic && isFieldAccess(fmd)) return code.aload().setParam(0); return code.aload().setThis(); }
private void addNotifyAccess(Code code, FieldMetaData fmd) { // PCHelper.accessingField(this, <absolute-index>); code.aload().setThis(); code.constant().setValue(fmd.getIndex()); code.invokestatic().setMethod(RedefinitionHelper.class, "accessingField", void.class, new Class[] { Object.class, int.class }); }
/** * Add the {@link Instruction}s to load the instance to modify onto the * stack, and return it. If <code>forStatic</code> is set, then * <code>code</code> is in an accessor method or another static method; * otherwise, it is in one of the PC-specified methods. * * @return the first instruction added to <code>code</code>. */ private Instruction loadManagedInstance(Code code, boolean forStatic, FieldMetaData fmd) { if (forStatic && isFieldAccess(fmd)) return code.aload().setParam(0); return code.aload().setThis(); }
private void addNotifyAccess(Code code, FieldMetaData fmd) { // PCHelper.accessingField(this, <absolute-index>); code.aload().setThis(); code.constant().setValue(fmd.getIndex()); code.invokestatic().setMethod(RedefinitionHelper.class, "accessingField", void.class, new Class[] { Object.class, int.class }); }
/** * Add the {@link Instruction}s to load the instance to modify onto the * stack, and return it. If <code>forStatic</code> is set, then * <code>code</code> is in an accessor method or another static method; * otherwise, it is in one of the PC-specified methods. * * @return the first instruction added to <code>code</code>. */ private Instruction loadManagedInstance(Code code, boolean forStatic, FieldMetaData fmd) { if (forStatic && isFieldAccess(fmd)) return code.aload().setParam(0); return code.aload().setThis(); }
/** * Declare and start the base load method. */ private Code addLoadMethod(BCClass bc, boolean fields) { Class<?>[] args = null; if (fields) args = new Class[]{ OpenJPAStateManager.class, BitSet.class, FetchConfiguration.class, Object.class }; else args = new Class[]{ OpenJPAStateManager.class, FetchConfiguration.class, Object.class }; BCMethod load = bc.declareMethod("load", void.class, args); Code code = load.getCode(true); //loadVersion(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadVersion", void.class, new Class[]{ OpenJPAStateManager.class }); //loadImplData(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadImplData", void.class, new Class[]{ OpenJPAStateManager.class }); return code; }
/** * Implement initialize. */ private void addInitialize(BCClass bc, int objectCount) { BCMethod meth = bc.declareMethod("initialize", void.class, null); Code code = meth.getCode(true); JumpInstruction ifins = null; if (objectCount > 0) { // if (objects == null) // objects = new Object[objectCount]; code.aload().setThis(); code.getfield().setField("objects", Object[].class); ifins = code.ifnonnull(); code.aload().setThis(); code.constant().setValue(objectCount); code.anewarray().setType(Object.class); code.putfield().setField("objects", Object[].class); } Instruction ins = code.vreturn(); if (ifins != null) ifins.setTarget(ins); code.calculateMaxLocals(); code.calculateMaxStack(); }
/** * Declare and start the base load method. */ private Code addLoadMethod(BCClass bc, boolean fields) { Class<?>[] args = null; if (fields) args = new Class[]{ OpenJPAStateManager.class, BitSet.class, FetchConfiguration.class, Object.class }; else args = new Class[]{ OpenJPAStateManager.class, FetchConfiguration.class, Object.class }; BCMethod load = bc.declareMethod("load", void.class, args); Code code = load.getCode(true); //loadVersion(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadVersion", void.class, new Class[]{ OpenJPAStateManager.class }); //loadImplData(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadImplData", void.class, new Class[]{ OpenJPAStateManager.class }); return code; }
/** * Implement initialize. */ private void addInitialize(BCClass bc, int objectCount) { BCMethod meth = bc.declareMethod("initialize", void.class, null); Code code = meth.getCode(true); JumpInstruction ifins = null; if (objectCount > 0) { // if (objects == null) // objects = new Object[objectCount]; code.aload().setThis(); code.getfield().setField("objects", Object[].class); ifins = code.ifnonnull(); code.aload().setThis(); code.constant().setValue(objectCount); code.anewarray().setType(Object.class); code.putfield().setField("objects", Object[].class); } Instruction ins = code.vreturn(); if (ifins != null) ifins.setTarget(ins); code.calculateMaxLocals(); code.calculateMaxStack(); }
/** * Declare and start the base load method. */ private Code addLoadMethod(BCClass bc, boolean fields) { Class<?>[] args = null; if (fields) args = new Class[]{ OpenJPAStateManager.class, BitSet.class, FetchConfiguration.class, Object.class }; else args = new Class[]{ OpenJPAStateManager.class, FetchConfiguration.class, Object.class }; BCMethod load = bc.declareMethod("load", void.class, args); Code code = load.getCode(true); //loadVersion(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadVersion", void.class, new Class[]{ OpenJPAStateManager.class }); //loadImplData(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadImplData", void.class, new Class[]{ OpenJPAStateManager.class }); return code; }
/** * Implement initialize. */ private void addInitialize(BCClass bc, int objectCount) { BCMethod meth = bc.declareMethod("initialize", void.class, null); Code code = meth.getCode(true); JumpInstruction ifins = null; if (objectCount > 0) { // if (objects == null) // objects = new Object[objectCount]; code.aload().setThis(); code.getfield().setField("objects", Object[].class); ifins = code.ifnonnull(); code.aload().setThis(); code.constant().setValue(objectCount); code.anewarray().setType(Object.class); code.putfield().setField("objects", Object[].class); } Instruction ins = code.vreturn(); if (ifins != null) ifins.setTarget(ins); code.calculateMaxLocals(); code.calculateMaxStack(); }
/** * Declare and start the base load method. */ private Code addLoadMethod(BCClass bc, boolean fields) { Class[] args = null; if (fields) args = new Class[]{ OpenJPAStateManager.class, BitSet.class, FetchConfiguration.class, Object.class }; else args = new Class[]{ OpenJPAStateManager.class, FetchConfiguration.class, Object.class }; BCMethod load = bc.declareMethod("load", void.class, args); Code code = load.getCode(true); //loadVersion(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadVersion", void.class, new Class[]{ OpenJPAStateManager.class }); //loadImplData(sm); code.aload().setThis(); code.aload().setParam(0); code.invokevirtual().setMethod("loadImplData", void.class, new Class[]{ OpenJPAStateManager.class }); return code; }
/** * Implement initialize. */ private void addInitialize(BCClass bc, int objectCount) { BCMethod meth = bc.declareMethod("initialize", void.class, null); Code code = meth.getCode(true); JumpInstruction ifins = null; if (objectCount > 0) { // if (objects == null) // objects = new Object[objectCount]; code.aload().setThis(); code.getfield().setField("objects", Object[].class); ifins = code.ifnonnull(); code.aload().setThis(); code.constant().setValue(objectCount); code.anewarray().setType(Object.class); code.putfield().setField("objects", Object[].class); } Instruction ins = code.vreturn(); if (ifins != null) ifins.setTarget(ins); code.calculateMaxLocals(); code.calculateMaxStack(); }