/** * Adds a public, no-arg constructor with the code buffer properly defined. */ public MethodInfo addDefaultConstructor() { MethodInfo mi = addConstructor(Modifiers.PUBLIC, null); CodeBuilder builder = new CodeBuilder(mi); builder.loadThis(); builder.invokeSuperConstructor(null); builder.returnVoid(); return mi; }
new TypeDesc[] {atomicRefType})); b.loadThis(); b.invokeSuperConstructor(null); b.loadThis(); b.loadLocal(b.getParameter(0));
private static RuntimeClassFile generateClassFile(Class beanType, PropertySet set) { BeanProperty[][] props = getBeanProperties(beanType, set); RuntimeClassFile cf = new RuntimeClassFile (BeanPropertyAccessor.class.getName(), BeanPropertyAccessor.class.getName(), beanType.getClassLoader()); cf.markSynthetic(); cf.setSourceFile(BeanPropertyAccessor.class.getName()); try { cf.setTarget(System.getProperty("java.specification.version")); } catch (Exception e) { } MethodInfo ctor = cf.addConstructor(Modifiers.PUBLIC, null); ctor.markSynthetic(); CodeBuilder b = new CodeBuilder(ctor); b.loadThis(); b.invokeSuperConstructor(null); b.returnVoid(); generateAccessMethod(cf, beanType, props[0], READ_METHOD); generateAccessMethod(cf, beanType, props[0], TRY_READ_METHOD); generateAccessMethod(cf, beanType, props[0], HAS_READ_METHOD); generateAccessMethod(cf, beanType, props[1], WRITE_METHOD); generateAccessMethod(cf, beanType, props[1], TRY_WRITE_METHOD); generateAccessMethod(cf, beanType, props[1], HAS_WRITE_METHOD); generateSearchMethod(cf, beanType, props[0]); return cf; }
mBuilder.loadThis(); mBuilder.loadLocal(mBuilder.getParameter(0)); mBuilder.invokeSuperConstructor(params); mBuilder.returnVoid();
builder.invokeSuperConstructor(null); builder.loadThis(); builder.loadLocal(builder.getParameter(0));
/** * Adds a public, no-arg constructor with the code buffer properly defined. */ public MethodInfo addDefaultConstructor() { MethodInfo mi = addConstructor(Modifiers.PUBLIC, null); CodeBuilder builder = new CodeBuilder(mi); builder.loadThis(); builder.invokeSuperConstructor(null); builder.returnVoid(); return mi; }
new TypeDesc[] {atomicRefType})); b.loadThis(); b.invokeSuperConstructor(null); b.loadThis(); b.loadLocal(b.getParameter(0));
private static void addPlainConstructor(RuntimeClassFile cf, TypeDesc delegateDesc) { CodeBuilder b = new CodeBuilder (cf.addConstructor(Modifiers.PUBLIC, new TypeDesc[] {delegateDesc})); b.loadThis(); b.invokeSuperConstructor(null); b.loadThis(); b.loadLocal(b.getParameter(0)); b.storeField("delegate", delegateDesc); b.returnVoid(); }
new TypeDesc[] {atomicRefType})); b.loadThis(); b.invokeSuperConstructor(null); b.loadThis(); b.loadLocal(b.getParameter(0));
b.loadLocal(b.getParameter(0)); b.loadLocal(b.getParameter(1)); b.invokeSuperConstructor(params); b.returnVoid(); } else {
private static RuntimeClassFile generateClassFile(Class beanType, PropertySet set) { BeanProperty[][] props = getBeanProperties(beanType, set); RuntimeClassFile cf = new RuntimeClassFile (BeanPropertyAccessor.class.getName(), BeanPropertyAccessor.class.getName(), beanType.getClassLoader()); cf.markSynthetic(); cf.setSourceFile(BeanPropertyAccessor.class.getName()); cf.setTarget("1.5"); MethodInfo ctor = cf.addConstructor(Modifiers.PUBLIC, null); ctor.markSynthetic(); CodeBuilder b = new CodeBuilder(ctor); b.loadThis(); b.invokeSuperConstructor(null); b.returnVoid(); generateAccessMethod(cf, beanType, props[0], READ_METHOD); generateAccessMethod(cf, beanType, props[0], TRY_READ_METHOD); generateAccessMethod(cf, beanType, props[0], HAS_READ_METHOD); generateAccessMethod(cf, beanType, props[1], WRITE_METHOD); generateAccessMethod(cf, beanType, props[1], TRY_WRITE_METHOD); generateAccessMethod(cf, beanType, props[1], HAS_WRITE_METHOD); generateSearchMethod(cf, beanType, props[0]); return cf; }
new TypeDesc[] {atomicRefType})); b.loadThis(); b.invokeSuperConstructor(null); b.loadThis(); b.loadLocal(b.getParameter(0));
b.loadLocal(b.getParameter(0)); b.invokeSuperConstructor(params); b.returnVoid();
b.loadLocal(b.getParameter(0)); b.invokeSuperConstructor(params); b.returnVoid();
ctorBuilder.loadThis(); ctorBuilder.loadLocal(ctorBuilder.getParameter(0)); ctorBuilder.invokeSuperConstructor(new TypeDesc[] {cursorType});
mBuilder.loadThis(); mBuilder.loadLocal(mBuilder.getParameter(0)); mBuilder.invokeSuperConstructor(params); mBuilder.returnVoid();
ctorBuilder.loadThis(); ctorBuilder.loadLocal(ctorBuilder.getParameter(0)); ctorBuilder.invokeSuperConstructor(new TypeDesc[] {cursorType});
private Class<? extends S> generateAndInjectClass() { TypeDesc masterSupportType = TypeDesc.forClass(MasterSupport.class); TypeDesc delegateSupportType = TypeDesc.forClass(DelegateSupport.class); // Add constructor that accepts a DelegateSupport. { TypeDesc[] params = {delegateSupportType}; MethodInfo mi = mClassFile.addConstructor(Modifiers.PUBLIC, params); CodeBuilder b = new CodeBuilder(mi); b.loadThis(); b.loadLocal(b.getParameter(0)); b.invokeSuperConstructor(new TypeDesc[] {masterSupportType}); b.returnVoid(); } CodeBuilderUtil.definePrepareMethod(mClassFile, mStorableType, delegateSupportType); // Implement abstract methods which all delegate to DelegateSupport instance. generateDelegatedMethod (MasterStorableGenerator.DO_TRY_LOAD_MASTER_METHOD_NAME, "doTryLoad"); generateDelegatedMethod (MasterStorableGenerator.DO_TRY_INSERT_MASTER_METHOD_NAME, "doTryInsert"); generateDelegatedMethod (MasterStorableGenerator.DO_TRY_UPDATE_MASTER_METHOD_NAME, "doTryUpdate"); generateDelegatedMethod (MasterStorableGenerator.DO_TRY_DELETE_MASTER_METHOD_NAME, "doTryDelete"); Class<? extends S> generatedClass = mClassInjector.defineClass(mClassFile); return generatedClass; }
private Class<? extends S> generateAndInjectClass() { TypeDesc masterSupportType = TypeDesc.forClass(MasterSupport.class); TypeDesc delegateSupportType = TypeDesc.forClass(DelegateSupport.class); // Add constructor that accepts a DelegateSupport. { TypeDesc[] params = {delegateSupportType}; MethodInfo mi = mClassFile.addConstructor(Modifiers.PUBLIC, params); CodeBuilder b = new CodeBuilder(mi); b.loadThis(); b.loadLocal(b.getParameter(0)); b.invokeSuperConstructor(new TypeDesc[] {masterSupportType}); b.returnVoid(); } CodeBuilderUtil.definePrepareMethod(mClassFile, mStorableType, delegateSupportType); // Implement abstract methods which all delegate to DelegateSupport instance. generateDelegatedMethod (MasterStorableGenerator.DO_TRY_LOAD_MASTER_METHOD_NAME, "doTryLoad"); generateDelegatedMethod (MasterStorableGenerator.DO_TRY_INSERT_MASTER_METHOD_NAME, "doTryInsert"); generateDelegatedMethod (MasterStorableGenerator.DO_TRY_UPDATE_MASTER_METHOD_NAME, "doTryUpdate"); generateDelegatedMethod (MasterStorableGenerator.DO_TRY_DELETE_MASTER_METHOD_NAME, "doTryDelete"); Class<? extends S> generatedClass = mClassInjector.defineClass(mClassFile); return generatedClass; }
CodeBuilder b = new CodeBuilder(mi); b.loadThis(); b.invokeSuperConstructor(null); b.loadThis(); b.loadLocal(b.getParameter(0));