_allAttributesUnique = checkAttributesUnique();
// Compile code to emit element start tag
il.append(methodGen.loadHandler());
il.append(new PUSH(cpg, _name));
il.append(DUP2); // duplicate these 2 args for endElement
il.append(methodGen.startElement());
// The value of an attribute may depend on a (sibling) variable
int j=0;
while (j < elementCount()) {
final SyntaxTreeNode item = (SyntaxTreeNode) elementAt(j);
if (item instanceof Variable) {
item.translate(classGen, methodGen);
}
j++;
}
// Compile code to emit namespace attributes
if (_accessedPrefixes != null) {
boolean declaresDefaultNS = false;
Enumeration e = _accessedPrefixes.keys();
while (e.hasMoreElements()) {
final String prefix = (String)e.nextElement();
final String uri = (String)_accessedPrefixes.get(prefix);
if (uri != Constants.EMPTYSTRING ||
prefix != Constants.EMPTYSTRING)
{
if (prefix == Constants.EMPTYSTRING) {
declaresDefaultNS = true;
}
il.append(methodGen.loadHandler());
il.append(new PUSH(cpg,prefix));
il.append(new PUSH(cpg,uri));
il.append(methodGen.namespace());
}
}
/*
* If our XslElement parent redeclares the default NS, and this
* element doesn't, it must be redeclared one more time.
*/
if (!declaresDefaultNS && (_parent instanceof XslElement)
&& ((XslElement) _parent).declaresDefaultNS())
{
il.append(methodGen.loadHandler());
il.append(new PUSH(cpg, Constants.EMPTYSTRING));
il.append(new PUSH(cpg, Constants.EMPTYSTRING));
il.append(methodGen.namespace());
}
}
// Output all attributes