private Class<T> createWrapper() { RuntimeClassFile cf = new RuntimeClassFile(mType.getName()); cf.addInterface(mType); cf.markSynthetic(); cf.setSourceFile(BelatedCreator.class.getName()); cf.setTarget("1.5"); cf.addField(Modifiers.PRIVATE.toFinal(true), REF_FIELD_NAME, atomicRefType); CodeBuilder b = new CodeBuilder(cf.addConstructor(Modifiers.PUBLIC, new TypeDesc[] {atomicRefType})); b.loadThis(); addWrappedCall(cf, new CodeBuilder(cf.addMethod(m)), m); if (!Modifier.isFinal(modifiers) && Modifier.isPublic(modifiers)) { b = new CodeBuilder (cf.addMethod(Modifiers.PUBLIC, m.getName(), MethodDesc.forMethod(m))); addWrappedCall(cf, b, m); Class<T> clazz = cf.defineClass(); return clazz;
cf = new RuntimeClassFile(prefix, null, objectType.getClassLoader()); cf.setSourceFile(QuickConstructorGenerator.class.getName()); cf.setTarget("1.5"); cf.addInterface(factory); cf.markSynthetic(); cf.addDefaultConstructor(); CodeBuilder b = new CodeBuilder(cf.addMethod(method)); b.newObject(TypeDesc.forClass(objectType)); b.dup(); instance = (F) cf.defineClass().newInstance(); } catch (IllegalAccessException e) { throw new UndeclaredThrowableException(e);
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); } }
RuntimeClassFile cf = new RuntimeClassFile (name, superClassName, new Loader(admin), null, true); cf.setModifiers(Modifiers.PUBLIC); cf.addField(Modifiers.PRIVATE.toStatic(true).toFinal(true), "serialVersionUID", TypeDesc.LONG).setConstantValue(serialVersionUID); cf.addInterface("E".equals(type) ? Externalizable.class : Serializable.class); cf.addInterface(interfaceName); MethodInfo mi = cf.addConstructor(Modifiers.PRIVATE, params); CodeBuilder b = new CodeBuilder(mi); b.loadThis(); b.returnVoid(); } else { cf.addDefaultConstructor(); Class clazz = cf.defineClass(); mSyntheticSerializableTypes.put(key, clazz); return clazz;
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; }
public RuntimeClassFile createClassFile() { RuntimeClassFile cf = new RuntimeClassFile (PatternMatcher.class.getName(), PatternMatcher.class.getName(), PatternMatcher.class.getClassLoader()); cf.markSynthetic(); cf.setSourceFile(PatternMatcher.class.getName()); MethodInfo mi = cf.addConstructor(Modifiers.PUBLIC, params); mBuilder = new CodeBuilder(mi); mBuilder.loadThis(); mi = cf.addMethod(Modifiers.PUBLIC, "fillMatchResults", null, params); mBuilder = new CodeBuilder(mi);
cf.setModifiers(Modifiers.PUBLIC.toInterface(true)); cf.addInterface(Remote.class); TypeDesc exType = TypeDesc.forClass(RemoteException.class); cf.addInterface(iface); cf.addMethod(Modifiers.PUBLIC_ABSTRACT, name, desc.getReturnType(), desc.getParameterTypes()) .addException(exType); Class type = cf.defineClass(); mSyntheticRemoteTypes.put(key, type); return type;
public BeanPropertyAccessor<B> run() { Class clazz = generateClassFile(beanType, set).defineClass(); try { return (BeanPropertyAccessor<B>) clazz.newInstance(); } catch (InstantiationException e) { throw new InternalError(e.toString()); } catch (IllegalAccessException e) { throw new InternalError(e.toString()); } } });
static RuntimeClassFile createRuntimeClassFile(String name, ClassLoader loader) { if (name.startsWith("java.")) { // Rename to avoid SecurityException. name = "java$" + name.substring(4); } /* // Use a middle loader to support unloading of generated classes. // TODO: more than one class? class MiddleLoader extends ClassLoader { MiddleLoader() { } MiddleLoader(ClassLoader parent) { super(parent); } }; if (loader == null) { loader = new MiddleLoader(); } else { loader = new MiddleLoader(loader); } */ return new RuntimeClassFile(name, null, loader); }
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(); }
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; }
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; }
public RuntimeClassFile createClassFile() { RuntimeClassFile cf = new RuntimeClassFile (PatternMatcher.class.getName(), PatternMatcher.class.getName(), PatternMatcher.class.getClassLoader()); cf.markSynthetic(); cf.setSourceFile(PatternMatcher.class.getName()); MethodInfo mi = cf.addConstructor(Modifiers.PUBLIC, params); mBuilder = new CodeBuilder(mi); mBuilder.loadThis(); mi = cf.addMethod(Modifiers.PUBLIC, "fillMatchResults", null, params); mBuilder = new CodeBuilder(mi);
public PatternMatcher<V> run() { Class clz = clazz; if (clz == null) { clz = maker.createClassFile().defineClass(); cPatternMatcherClasses.put(maker.getKey(), clz); } try { Constructor ctor = clz.getConstructor(new Class[]{Object[].class}); return (PatternMatcher)ctor.newInstance(new Object[]{maker.getMappedValues()}); } catch (NoSuchMethodException e) { throw new InternalError(e.toString()); } catch (InstantiationException e) { throw new InternalError(e.toString()); } catch (IllegalAccessException e) { throw new InternalError(e.toString()); } catch (InvocationTargetException e) { throw new InternalError(e.toString()); } } });
private Class generateComparatorClass(Rules rules) { RuntimeClassFile cf = new RuntimeClassFile (getClass().getName(), null, mBeanClass.getClassLoader()); cf.markSynthetic(); cf.setSourceFile(BeanComparator.class.getName()); try { cf.setTarget(System.getProperty("java.specification.version")); } catch (Exception e) { cf.addInterface(Comparator.class); cf.addInterface(Serializable.class); cf.addField(Modifiers.PRIVATE, "mCollators", comparatorArrayType).markSynthetic(); cf.addField(Modifiers.PRIVATE, "mUsingComparators", comparatorArrayType).markSynthetic(); comparatorArrayType, comparatorArrayType }; MethodInfo ctor = cf.addConstructor(Modifiers.PUBLIC, paramTypes); ctor.markSynthetic(); CodeBuilder builder = new CodeBuilder(ctor); MethodInfo mi = cf.addMethod(compareMethod); mi.markSynthetic(); builder = new CodeBuilder(mi); return cf.defineClass();
cf = new RuntimeClassFile(prefix, null, objectType.getClassLoader()); cf.setSourceFile(QuickConstructorGenerator.class.getName()); cf.setTarget("1.5"); cf.addInterface(factory); cf.markSynthetic(); cf.addDefaultConstructor(); CodeBuilder b = new CodeBuilder(cf.addMethod(method)); b.newObject(TypeDesc.forClass(objectType)); b.dup(); instance = (F) cf.defineClass().newInstance(); } catch (IllegalAccessException e) { throw new UndeclaredThrowableException(e);
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); } }
public BeanPropertyAccessor<B> run() { Class clazz = generateClassFile(beanType, set).defineClass(); try { return (BeanPropertyAccessor<B>) clazz.newInstance(); } catch (InstantiationException e) { throw new InternalError(e.toString()); } catch (IllegalAccessException e) { throw new InternalError(e.toString()); } } });
private Class<T> createWrapper() { RuntimeClassFile cf = new RuntimeClassFile(mType.getName()); cf.addInterface(mType); cf.markSynthetic(); cf.setSourceFile(BelatedCreator.class.getName()); cf.setTarget("1.5"); cf.addField(Modifiers.PRIVATE.toFinal(true), REF_FIELD_NAME, atomicRefType); CodeBuilder b = new CodeBuilder(cf.addConstructor(Modifiers.PUBLIC, new TypeDesc[] {atomicRefType})); b.loadThis(); addWrappedCall(cf, new CodeBuilder(cf.addMethod(m)), m); if (!Modifier.isFinal(modifiers) && Modifier.isPublic(modifiers)) { b = new CodeBuilder (cf.addMethod(Modifiers.PUBLIC, m.getName(), MethodDesc.forMethod(m))); addWrappedCall(cf, b, m); Class<T> clazz = cf.defineClass(); return clazz;
public PatternMatcher<V> run() { Class clz = clazz; if (clz == null) { clz = maker.createClassFile().defineClass(); cPatternMatcherClasses.put(maker.getKey(), clz); } try { Constructor ctor = clz.getConstructor(new Class[]{Object[].class}); return (PatternMatcher)ctor.newInstance(new Object[]{maker.getMappedValues()}); } catch (NoSuchMethodException e) { throw new InternalError(e.toString()); } catch (InstantiationException e) { throw new InternalError(e.toString()); } catch (IllegalAccessException e) { throw new InternalError(e.toString()); } catch (InvocationTargetException e) { throw new InternalError(e.toString()); } } });