/** * Create a ClassInjector for defining one class. The parent ClassLoader * used is the one which loaded the ClassInjector class. */ public static ClassInjector create() { return create(null, null); }
return new ClassInjector(name, loader);
/** * Define the new class from a ClassFile object. * * @return the newly created class * @throws IllegalStateException if new class has already been defined * or if a stream has already been opened */ public Class defineClass(ClassFile cf) { try { cf.writeTo(openStream()); } catch (IOException e) { throw new InternalError(e.toString()); } return getNewClass(); }
ClassInjector ci = ClassInjector.create(prefix, objectType.getClassLoader()); cf = new ClassFile(ci.getClassName()); cf.setSourceFile(QuickConstructorGenerator.class.getName()); cf.setTarget("1.5"); instance = (F) ci.defineClass(cf).newInstance(); } catch (IllegalAccessException e) { throw new UndeclaredThrowableException(e);
private DelegateStorableGenerator(Class<S> type, EnumSet<MasterFeature> features) throws SupportException { mStorableType = type; final Class<? extends S> abstractClass = MasterStorableGenerator.getAbstractClass(mStorableType, features); mClassInjector = ClassInjector.create(mStorableType.getName(), abstractClass.getClassLoader()); mClassFile = new ClassFile(mClassInjector.getClassName(), abstractClass); mClassFile.markSynthetic(); mClassFile.setSourceFile(DelegateStorableGenerator.class.getName()); mClassFile.setTarget("1.5"); }
mInjector = ClassInjector.createExplicit(className, loader); } else { mInjector = ClassInjector.create(className, loader); mClassFile = new ClassFile(mInjector.getClassName());
private Class<? extends S> generateAndInjectClass() { generateClass(); Class abstractClass = mClassInjector.defineClass(mClassFile); return abstractClass; }
cf = new ClassFile(ci.getClassName()); cf.addInterface(type); } else { cf = new ClassFile(ci.getClassName(), type);
ClassInjector ci = ClassInjector.create(prefix, objectType.getClassLoader()); cf = new ClassFile(ci.getClassName()); cf.setSourceFile(QuickConstructorGenerator.class.getName()); cf.setTarget("1.5"); instance = (F) ci.defineClass(cf).newInstance(); } catch (IllegalAccessException e) { throw new UndeclaredThrowableException(e);
private DelegateStorableGenerator(Class<S> type, EnumSet<MasterFeature> features) throws SupportException { mStorableType = type; final Class<? extends S> abstractClass = MasterStorableGenerator.getAbstractClass(mStorableType, features); mClassInjector = ClassInjector.create(mStorableType.getName(), abstractClass.getClassLoader()); mClassFile = new ClassFile(mClassInjector.getClassName(), abstractClass); mClassFile.markSynthetic(); mClassFile.setSourceFile(DelegateStorableGenerator.class.getName()); mClassFile.setTarget("1.5"); }
mInjector = ClassInjector.createExplicit(className, loader); } else { mInjector = ClassInjector.create(className, loader); mClassFile = new ClassFile(mInjector.getClassName());
private Class<? extends S> generateAndInjectClass() throws SupportException { generateClass(); Class abstractClass = mClassInjector.defineClass(mClassFile); return (Class<? extends S>) abstractClass; }
cf = new ClassFile(ci.getClassName()); cf.addInterface(type); } else { cf = new ClassFile(ci.getClassName(), type);
private Class<T> createWrapper() { ClassInjector ci = ClassInjector.create(); ClassFile cf = new ClassFile(ci.getClassName()); cf.addInterface(mType); cf.markSynthetic(); Class<T> clazz = ci.defineClass(cf); return clazz;
private MasterStorableGenerator(Class<S> storableType, EnumSet<MasterFeature> features) { mFeatures = features; mInfo = StorableIntrospector.examine(storableType); mAllProperties = mInfo.getAllProperties(); final Class<? extends S> abstractClass = StorableGenerator.getAbstractClass(storableType); mClassInjector = ClassInjector.create (storableType.getName(), abstractClass.getClassLoader()); mClassFile = new ClassFile(mClassInjector.getClassName(), abstractClass); mClassFile.setModifiers(mClassFile.getModifiers().toAbstract(true)); mClassFile.markSynthetic(); mClassFile.setSourceFile(MasterStorableGenerator.class.getName()); mClassFile.setTarget("1.5"); }
/** * Create a ClassInjector for defining one class. The prefix is optional, * which is used as the start of the auto-generated class name. If the * parent ClassLoader is not specified, it will default to the ClassLoader of * the ClassInjector class. * <p> * If the parent loader was used for loading injected classes, the new * class will be loaded by it. This allows auto-generated classes access to * package accessible members, as long as they are defined in the same * package. * * @param prefix optional class name prefix * @param parent optional parent ClassLoader */ public static ClassInjector create(String prefix, ClassLoader parent) { return create(prefix, parent, false); }
/** * Define the new class from a ClassFile object. * * @return the newly created class * @throws IllegalStateException if new class has already been defined * or if a stream has already been opened */ public Class defineClass(ClassFile cf) { try { cf.writeTo(openStream()); } catch (IOException e) { throw new InternalError(e.toString()); } return getNewClass(); }
private Class<? extends S> generateAndInjectClass() throws SupportException { generateClass(); Class abstractClass = mClassInjector.defineClass(mClassFile); return (Class<? extends S>) abstractClass; }
return new ClassInjector(name, loader);
private Class<T> createWrapper() { ClassInjector ci = ClassInjector.create(); ClassFile cf = new ClassFile(ci.getClassName()); cf.addInterface(mType); cf.markSynthetic(); Class<T> clazz = ci.defineClass(cf); return clazz;