/** * 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; }
private static ThrowUnchecked generateImpl() { RuntimeClassFile cf = new RuntimeClassFile(null, ThrowUnchecked.class.getName()); cf.addDefaultConstructor(); CodeBuilder b = new CodeBuilder (cf.addMethod(Modifiers.PROTECTED, "doFire", null, new TypeDesc[] {TypeDesc.forClass(Throwable.class)})); b.loadLocal(b.getParameter(0)); b.throwObject(); try { return (ThrowUnchecked) cf.defineClass().newInstance(); } catch (Exception e) { throw new Error(e); } }
CodeBuilder b = new CodeBuilder(cf.addMethod(method)); b.newObject(TypeDesc.forClass(objectType)); b.dup();
CodeBuilder b = new CodeBuilder(cf.addConstructor(Modifiers.PUBLIC, new TypeDesc[] {atomicRefType})); b.loadThis(); addWrappedCall(cf, new CodeBuilder(cf.addMethod(m)), m); int modifiers = m.getModifiers(); if (!Modifier.isFinal(modifiers) && Modifier.isPublic(modifiers)) { b = new CodeBuilder (cf.addMethod(Modifiers.PUBLIC, m.getName(), MethodDesc.forMethod(m))); addWrappedCall(cf, b, m);
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; }
/** * Returns a new CodeBuilder instance for adding instructions to this * method. */ public CodeBuilder newCodeBuilder() { return new CodeBuilder(this); }
TypeDesc[] params = {objectArrayType}; MethodInfo mi = cf.addConstructor(Modifiers.PUBLIC, params); mBuilder = new CodeBuilder(mi); mBuilder.loadThis(); mBuilder.loadLocal(mBuilder.getParameter(0)); params = new TypeDesc[]{charArrayType, mIntType, mListType}; mi = cf.addMethod(Modifiers.PUBLIC, "fillMatchResults", null, params); mBuilder = new CodeBuilder(mi);
private Class<?> generateClass(ScoreFormulaLexer lexer, int funcNum) throws Exception { // initialize the code generator RuntimeClassFile cf = new RuntimeClassFile("UserDefinedFunction_"+funcNum); cf.addInterface("com.flaptor.indextank.index.scorer.ScoreFunction"); cf.addDefaultConstructor(); docVarType = TypeDesc.forClass("com.flaptor.indextank.index.scorer.Boosts"); // DocVariables queryVarType = TypeDesc.forClass("com.flaptor.indextank.query.QueryVariables"); // Variables params = new TypeDesc[] {TypeDesc.DOUBLE, TypeDesc.INT, docVarType, queryVarType}; MethodInfo mi = cf.addMethod(Modifiers.PUBLIC, "score", TypeDesc.DOUBLE, params); b = new CodeBuilder(mi); scoreParam = b.getParameter(0); ageParam = b.getParameter(1); docVarParam = b.getParameter(2); queryVarParam = b.getParameter(3); // parse and generate code start(); error = error == null ? lexer.getError() : error; if (null != error) { throw error; } // return the generated class Class<?> clazz = cf.defineClass(); return clazz; }
CodeBuilder b = new CodeBuilder(mi);
/** * Generates a private method which accepts a property name and returns * PROPERTY_STATE_UNINITIALIZED, PROPERTY_STATE_DIRTY, or * PROPERTY_STATE_CLEAN. */ private void addPropertyStateExtractMethod() { MethodInfo mi = mClassFile.addMethod(Modifiers.PRIVATE, PROPERTY_STATE_EXTRACT_METHOD_NAME, TypeDesc.INT, new TypeDesc[] {TypeDesc.STRING}); addPropertySwitch(new CodeBuilder(mi), SWITCH_FOR_STATE); }
private void addSetPropertyValueMethod() { MethodInfo mi = addMethodIfNotFinal(Modifiers.PUBLIC, SET_PROPERTY_VALUE, null, new TypeDesc[] {TypeDesc.STRING, TypeDesc.OBJECT}); if (mi == null) { return; } CodeBuilder b = new CodeBuilder(mi); addPropertySwitch(b, SWITCH_FOR_SET); }
private void addGetPropertyValueMethod() { MethodInfo mi = addMethodIfNotFinal(Modifiers.PUBLIC, GET_PROPERTY_VALUE, TypeDesc.OBJECT, new TypeDesc[] {TypeDesc.STRING}); if (mi == null) { return; } CodeBuilder b = new CodeBuilder(mi); addPropertySwitch(b, SWITCH_FOR_GET); }
private void addSetPropertyValueMethod() { MethodInfo mi = addMethodIfNotFinal(Modifiers.PUBLIC, SET_PROPERTY_VALUE, null, new TypeDesc[] {TypeDesc.STRING, TypeDesc.OBJECT}); if (mi == null) { return; } CodeBuilder b = new CodeBuilder(mi); addPropertySwitch(b, SWITCH_FOR_SET); }
CodeBuilder b = new CodeBuilder(mi);
private void addPrimitiveConvertMethod(Class fromType) { Method m = getAbstractConvertMethod(fromType); if (m == null) { return; } CodeBuilder b = new CodeBuilder(mClassFile.addMethod(m)); addConversionSwitch(b, fromType); }
MethodInfo ctor = cf.addConstructor(Modifiers.PUBLIC, paramTypes); ctor.markSynthetic(); CodeBuilder builder = new CodeBuilder(ctor); builder = new CodeBuilder(mi);
/** * 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; }
private void defineExtractDataMethod(Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap) throws SupportException { MethodInfo mi = mClassFile.addMethod (Modifiers.PRIVATE, EXTRACT_DATA_METHOD_NAME, null, new TypeDesc[] {TypeDesc.forClass(ResultSet.class), TypeDesc.INT, TypeDesc.forClass(Lob.class).toArrayType()}); CodeBuilder b = new CodeBuilder(mi); defineExtract(b, b.getParameter(0), b.getParameter(1), b.getParameter(2), mInfo.getDataProperties().values(), lobLoaderMap); b.returnVoid(); }
private void defineExtractDataMethod(Map<JDBCStorableProperty<S>, Class<?>> lobLoaderMap) throws SupportException { MethodInfo mi = mClassFile.addMethod (Modifiers.PRIVATE, EXTRACT_DATA_METHOD_NAME, null, new TypeDesc[] {TypeDesc.forClass(ResultSet.class), TypeDesc.INT, TypeDesc.forClass(Lob.class).toArrayType()}); CodeBuilder b = new CodeBuilder(mi); defineExtract(b, b.getParameter(0), b.getParameter(1), b.getParameter(2), mInfo.getDataProperties().values(), lobLoaderMap); b.returnVoid(); }
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(); }