b = loop.body();
JVar attName = b.decl(model._ref(String.class), "attName", xsrVar.invoke("getAttributeLocalName").arg(var));
JVar attNs = b.decl(model._ref(String.class), "attNs", xsrVar.invoke("getAttributeNamespace").arg(var));
JVar attValue = b.decl(model._ref(String.class), "attValue", xsrVar.invoke("getAttributeValue").arg(var));
JConditional cond = null;
for (Map.Entry<QName, AttributeParserBuilderImpl> e : attributes.entrySet()) {
QName name = e.getKey();
AttributeParserBuilderImpl builder = e.getValue();
JExpression localInv = attName.eq(JExpr.lit(name.getLocalPart()));
String ns = name.getNamespaceURI();
JExpression nsInv = JExpr.lit(name.getNamespaceURI()).eq(attNs);
if (ns.equals("")) {
nsInv = nsInv.cor(attNs.eq(JExpr._null()));
}
JExpression qnameCompare = localInv.cand(nsInv);
if (cond == null) {
cond = b._if(qnameCompare);
} else {
cond = cond._else()._if(qnameCompare);
}
JMethod nextMethod = builder.getMethod();
JInvocation invocation = JExpr.invoke(nextMethod).arg(xsrVar).arg(rtContextVar);
for (JVar v : builder.variables) {
invocation.arg(v);
}
nextMethod.param(model._ref(String.class), "_attValue");
invocation.arg(attValue);
nextMethod.body().add(builder.codeBlock);
if (root && builder.returnType != null) {
cond._then()._return(invocation);
} else {
cond._then().add(invocation);
}
// TODO: throw exception if unknown elements are encountered and allowUnknown == false
builder.write();
}