< prev index next >

src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java

Print this page
rev 1019 : 8168664: [JAXP] XALAN: xsl:element generates namespace prefixes if namespace is given as URI only

*** 191,204 **** } /** * At runtime the compilation of xsl:element results in code that: (i) * evaluates the avt for the name, (ii) checks for a prefix in the name ! * (iii) generates a new prefix and create a new qname when necessary ! * (iv) calls startElement() on the handler (v) looks up a uri in the XML ! * when the prefix is not known at compile time (vi) calls namespace() ! * on the handler (vii) evaluates the contents (viii) calls endElement(). */ public void translate(ClassGenerator classGen, MethodGenerator methodGen) { final ConstantPoolGen cpg = classGen.getConstantPool(); final InstructionList il = methodGen.getInstructionList(); --- 191,203 ---- } /** * At runtime the compilation of xsl:element results in code that: (i) * evaluates the avt for the name, (ii) checks for a prefix in the name ! * (iii) calls startElement() on the handler (iv) looks up a uri in the XML ! * when the prefix is not known at compile time (v) calls namespace() ! * on the handler (vi) evaluates the contents (vii) calls endElement(). */ public void translate(ClassGenerator classGen, MethodGenerator methodGen) { final ConstantPoolGen cpg = classGen.getConstantPool(); final InstructionList il = methodGen.getInstructionList();
*** 207,262 **** translateLiteral(classGen, methodGen); return; } if (!_ignore) { - // if the qname is an AVT, then the qname has to be checked at runtime if it is a valid qname - LocalVariableGen nameValue = - methodGen.addLocalVariable2("nameValue", - Util.getJCRefType(STRING_SIG), - null); - - // store the name into a variable first so _name.translate only needs to be called once _name.translate(classGen, methodGen); nameValue.setStart(il.append(new ASTORE(nameValue.getIndex()))); il.append(new ALOAD(nameValue.getIndex())); ! // call checkQName if the name is an AVT ! final int check = cpg.addMethodref(BASIS_LIBRARY_CLASS, "checkQName", ! "(" ! +STRING_SIG ! +")V"); ! il.append(new INVOKESTATIC(check)); ! // Push handler for call to endElement() il.append(methodGen.loadHandler()); // load name value again nameValue.setEnd(il.append(new ALOAD(nameValue.getIndex()))); if (_namespace != null) { _namespace.translate(classGen, methodGen); ! } ! else { il.append(ACONST_NULL); } ! // Push additional arguments il.append(methodGen.loadHandler()); il.append(methodGen.loadDOM()); il.append(methodGen.loadCurrentNode()); ! // Invoke BasisLibrary.startXslElemCheckQName() ! il.append(new INVOKESTATIC( ! cpg.addMethodref(BASIS_LIBRARY_CLASS, "startXslElement", ! "(" + STRING_SIG ! + STRING_SIG ! + TRANSLET_OUTPUT_SIG ! + DOM_INTF_SIG + "I)" + STRING_SIG))); ! ! } translateContents(classGen, methodGen); if (!_ignore) { --- 206,252 ---- translateLiteral(classGen, methodGen); return; } if (!_ignore) { + // store the name into a variable so _name.translate only needs + // to be called once + LocalVariableGen nameValue = methodGen.addLocalVariable2 + ("nameValue", Util.getJCRefType(STRING_SIG), null); _name.translate(classGen, methodGen); + nameValue.setStart(il.append(new ASTORE(nameValue.getIndex()))); il.append(new ALOAD(nameValue.getIndex())); ! // if the qname is an AVT, then the qname has to be checked at ! // runtime if it is a valid qname ! il.append(new INVOKESTATIC(cpg.addMethodref ! (BASIS_LIBRARY_CLASS, "checkQName", "(" + STRING_SIG + ")V"))); ! // push handler for call to endElement() il.append(methodGen.loadHandler()); // load name value again nameValue.setEnd(il.append(new ALOAD(nameValue.getIndex()))); if (_namespace != null) { _namespace.translate(classGen, methodGen); ! } else { il.append(ACONST_NULL); } ! // push additional arguments il.append(methodGen.loadHandler()); il.append(methodGen.loadDOM()); il.append(methodGen.loadCurrentNode()); ! // invoke BasisLibrary.startXslElement() ! il.append(new INVOKESTATIC(cpg.addMethodref ! (BASIS_LIBRARY_CLASS, "startXslElement", "(" + STRING_SIG + ! STRING_SIG + TRANSLET_OUTPUT_SIG + DOM_INTF_SIG + "I)" + ! STRING_SIG))); } translateContents(classGen, methodGen); if (!_ignore) {
< prev index next >