*/
private PropertyConduit build(Class rootClass, String expression)
{
String name = ClassFabUtils.generateClassName("PropertyConduit");
ClassFab classFab = _classFactory.newClass(name, BasePropertyConduit.class);
classFab.addConstructor(new Class[]
{ Class.class, AnnotationProvider.class, String.class }, null, "super($$);");
String[] terms = expression.split("\\.");
final Method readMethod = buildGetter(rootClass, classFab, expression, terms);
final Method writeMethod = buildSetter(rootClass, classFab, expression, terms);
// A conduit is either readable or writable, otherwise there will already have been
// an error about unknown method name or property name.
Class propertyType = readMethod != null ? readMethod.getReturnType() : writeMethod
.getParameterTypes()[0];
String description = String.format(
"PropertyConduit[%s %s]",
rootClass.getName(),
expression);
Class conduitClass = classFab.createClass();
AnnotationProvider provider = new AnnotationProvider()
{
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)