Class parentClass,
RuntimeElementPropertyInfo propEl,
RuntimeTypeRef typeRef) {
RuntimeNonElement target = typeRef.getTarget();
Type rawType = propEl.getRawType();
Class c = (Class) target.getType();
JType jt = getType(c);
JType rawJT = getType(rawType);
QName name = typeRef.getTagName();
JBlock block = b.getCurrentBlock();
JBlock origBlock = block;
addType(c, target.getTypeName());
String propName = JaxbUtil.getGetter(parentClass, propEl.getName(), rawType);
JVar var = block.decl(rawJT,
propEl.getName() + "_" + javify(name.getLocalPart()),
b.getObject().invoke(propName));
if (!propEl.isRequired()) {
JConditional nullCond = block._if(var.ne(JExpr._null()));
block = nullCond._then();
b.setCurrentBlock(block);
if (typeRef.isNillable()) {
nullCond._else().add(b.getXSW().invoke("writeXsiNil"));
} else if (propEl.isCollection() && propEl.isCollectionNillable()) {
nullCond._else().add(b.getXSW().invoke("writeXsiNil"));
}
}
if (propEl.isCollection()) {
JForEach each = block.forEach(getGenericType(rawType), "_o", var);
JBlock newBody = each.body();
b.setCurrentBlock(newBody);
var = each.var();
rawType = c;
rawJT = jt;
}
ElementWriterBuilder valueBuilder = b.writeElement(name, rawJT, var);
if (target.isSimpleType()) {
if (rawType instanceof Class) {
c = (Class) rawType;
}
writeSimpleTypeElement(valueBuilder,
target,