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;
}