/** * Apply the context node to the matching templates. * * @see <a * href="http://www.w3.org/TR/xslt#section-Applying-Template-Rules">section-Applying-Template-Rules * in XSLT Specification</a> * @param transformer non-null reference to the the current transform-time state. * @param sourceNode non-null reference to the <a * href="http://www.w3.org/TR/xslt#dt-current-node">current source node</a>. * @param mode reference, which may be null, to the <a * href="http://www.w3.org/TR/xslt#modes">current mode</a>. * @throws TransformerException */ public void execute(TransformerImpl transformer) throws TransformerException { transformer.pushCurrentTemplateRuleIsNull(false); boolean pushMode = false; try { // %REVIEW% Do we need this check?? // if (null != sourceNode) // { // boolean needToTurnOffInfiniteLoopCheck = false; QName mode = transformer.getMode(); if (!m_isDefaultTemplate) { if (((null == mode) && (null != m_mode)) || ((null != mode) && !mode.equals(m_mode))) { pushMode = true; transformer.pushMode(m_mode); } } if (TransformerImpl.S_DEBUG) transformer.getTraceManager().fireTraceEvent(this); transformSelectedNodes(transformer); } finally { if (TransformerImpl.S_DEBUG) transformer.getTraceManager().fireTraceEndEvent(this); if (pushMode) transformer.popMode(); transformer.popCurrentTemplateRuleIsNull(); } }