public void endDocument() throws SAXException {
_parser.endDocument();
// create the templates
try {
XSLTC xsltc = _parser.getXSLTC();
// Set the translet class name if not already set
String transletName = null;
if (_systemId != null) {
transletName = Util.baseName(_systemId);
}
else {
transletName = (String)_tfactory.getAttribute("translet-name");
}
xsltc.setClassName(transletName);
// Get java-legal class name from XSLTC module
transletName = xsltc.getClassName();
Stylesheet stylesheet = null;
SyntaxTreeNode root = _parser.getDocumentRoot();
// Compile the translet - this is where the work is done!
if (!_parser.errorsFound() && root != null) {
// Create a Stylesheet element from the root node
stylesheet = _parser.makeStylesheet(root);
stylesheet.setSystemId(_systemId);
stylesheet.setParentStylesheet(null);
// Set a document loader (for xsl:include/import) if defined
if (_uriResolver != null) {
stylesheet.setSourceLoader(this);
}
_parser.setCurrentStylesheet(stylesheet);
// Set it as top-level in the XSLTC object
xsltc.setStylesheet(stylesheet);
// Create AST under the Stylesheet element
_parser.createAST(stylesheet);
}
// Generate the bytecodes and output the translet class(es)
if (!_parser.errorsFound() && stylesheet != null) {
stylesheet.setMultiDocument(xsltc.isMultiDocument());
stylesheet.setHasIdCall(xsltc.hasIdCall());
// Class synchronization is needed for BCEL
synchronized (xsltc.getClass()) {
stylesheet.translate();
}
}
if (!_parser.errorsFound()) {
// Check that the transformation went well before returning
final byte[][] bytecodes = xsltc.getBytecodes();
if (bytecodes != null) {
_templates =
new TemplatesImpl(xsltc.getBytecodes(), transletName,
_parser.getOutputProperties(), _indentNumber, _tfactory);
// Set URIResolver on templates object
if (_uriResolver != null) {
_templates.setURIResolver(_uriResolver);