blob: 5e4ce90c6b064166012b64739e5e9673b36fb513 [file] [log] [blame]
<HTML><HEAD><META CONTENT="text/html; charset=UTF-8" HTTP-EQUIV="Content-Type"/><TITLE>EMMA Coverage Report</TITLE><STYLE TYPE="text/css"> TABLE,TD,TH {border-style:solid; border-color:black;} TD,TH {background:white;margin:0;line-height:100%;padding-left:0.5em;padding-right:0.5em;} TD {border-width:0 1px 0 0;} TH {border-width:1px 1px 1px 0;} TR TD.h {color:red;} TABLE {border-spacing:0; border-collapse:collapse;border-width:0 0 1px 1px;} P,H1,H2,H3,TH {font-family:verdana,arial,sans-serif;font-size:10pt;} TD {font-family:courier,monospace;font-size:10pt;} TABLE.hdft {border-spacing:0;border-collapse:collapse;border-style:none;} TABLE.hdft TH,TABLE.hdft TD {border-style:none;line-height:normal;} TABLE.hdft TH.tl,TABLE.hdft TD.tl {background:#6699CC;color:white;} TABLE.hdft TD.nv {background:#6633DD;color:white;} .nv A:link {color:white;} .nv A:visited {color:white;} .nv A:active {color:yellow;} TABLE.hdft A:link {color:white;} TABLE.hdft A:visited {color:white;} TABLE.hdft A:active {color:yellow;} .in {color:#356085;} TABLE.s TD {padding-left:0.25em;padding-right:0.25em;} TABLE.s TD.l {padding-left:0.25em;padding-right:0.25em;text-align:right;background:#F0F0F0;} TABLE.s TR.z TD {background:#FF9999;} TABLE.s TR.p TD {background:#FFFF88;} TABLE.s TR.c TD {background:#CCFFCC;} A:link {color:#0000EE;text-decoration:none;} A:visited {color:#0000EE;text-decoration:none;} A:hover {color:#0000EE;text-decoration:underline;} TABLE.cn {border-width:0 0 1px 0;} TABLE.s {border-width:1px 0 1px 1px;} TD.h {color:red;border-width:0 1px 0 0;} TD.f {border-width:0 1px 0 1px;} TD.hf {color:red;border-width:0 1px 0 1px;} TH.f {border-width:1px 1px 1px 1px;} TR.cis TD {background:#F0F0F0;} TR.cis TD {border-width:1px 1px 1px 0;} TR.cis TD.h {color:red;border-width:1px 1px 1px 0;} TR.cis TD.f {border-width:1px 1px 1px 1px;} TR.cis TD.hf {color:red;border-width:1px 1px 1px 1px;} TD.b {border-style:none;background:transparent;line-height:50%;} TD.bt {border-width:1px 0 0 0;background:transparent;line-height:50%;} TR.o TD {background:#F0F0F0;}TABLE.it {border-style:none;}TABLE.it TD,TABLE.it TH {border-style:none;}</STYLE></HEAD><BODY><TABLE CLASS="hdft" CELLSPACING="0" WIDTH="100%"><TR><TH CLASS="tl"><A HREF="http://www.eclemma.org/">EMMA</A> Coverage Report (generated Fri Feb 20 18:44:54 GMT 2009)</TH></TR><TR><TD CLASS="nv">[<A HREF="../xslUnitTestCoverage.html">all classes</A>][<A HREF="56.html">org.eclipse.wst.xsl.jaxp.debug.debugger</A>]</TD></TR></TABLE><H2>COVERAGE SUMMARY FOR SOURCE FILE [<SPAN CLASS="in">DebugRunner.java</SPAN>]</H2><TABLE CELLSPACING="0" WIDTH="100%"><TR><TH>name</TH><TH>class, %</TH><TH>method, %</TH><TH>block, %</TH><TH>line, %</TH></TR><TR><TD>DebugRunner.java</TD><TD CLASS="h">0%   (0/2)</TD><TD CLASS="h">0%   (0/13)</TD><TD CLASS="h">0%   (0/745)</TD><TD CLASS="h">0%   (0/153)</TD></TR></TABLE><H3>COVERAGE BREAKDOWN BY CLASS AND METHOD</H3><TABLE CLASS="cn" CELLSPACING="0" WIDTH="100%"><TR><TH CLASS="f">name</TH><TH>class, %</TH><TH>method, %</TH><TH>block, %</TH><TH>line, %</TH></TR><TR><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD><TD CLASS="b"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#0">DebugRunner</A></TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/700)</TD><TD CLASS="h">0%   (0/143)</TD></TR><TR><TD CLASS="f"><A HREF="#0">&lt;static initializer&gt;</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/18)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#2">DebugRunner (BufferedReader, PrintWriter, PrintWriter, PrintWriter): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/15)</TD><TD CLASS="h">0%   (0/6)</TD></TR><TR><TD CLASS="f"><A HREF="#3">DebugRunner (int, int, int): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/56)</TD><TD CLASS="h">0%   (0/9)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#4">createDebugger (String): IXSLDebugger</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/7)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR><TD CLASS="f"><A HREF="#5">dispose (): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/49)</TD><TD CLASS="h">0%   (0/17)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#6">getSocket (int): Socket</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/17)</TD><TD CLASS="h">0%   (0/5)</TD></TR><TR><TD CLASS="f"><A HREF="#7">handleFatalError (String, Throwable): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/7)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#8">loop (IXSLDebugger): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/282)</TD><TD CLASS="h">0%   (0/57)</TD></TR><TR><TD CLASS="f"><A HREF="#9">main (String []): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/249)</TD><TD CLASS="h">0%   (0/42)</TD></TR><TR><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD><TD CLASS="bt"> </TD></TR><TR CLASS="cis"><TD CLASS="f">class <A HREF="#a">DebugRunner$1</A></TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/4)</TD><TD CLASS="h">0%   (0/45)</TD><TD CLASS="h">0%   (0/11)</TD></TR><TR><TD CLASS="f"><A HREF="#a">DebugRunner$1 (IXSLDebugger): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/6)</TD><TD CLASS="h">0%   (0/2)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#c">addStylesheet (Source, URIResolver, Map, Properties): Transformer</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/13)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR><TD CLASS="f"><A HREF="#d">addStylesheet (URL, Map, Properties, URIResolver): void</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/17)</TD><TD CLASS="h">0%   (0/3)</TD></TR><TR CLASS="o"><TD CLASS="f"><A HREF="#e">createTransformerFactory (): TransformerFactory</A></TD><TD> </TD><TD CLASS="h">0%   (0/1)</TD><TD CLASS="h">0%   (0/9)</TD><TD CLASS="h">0%   (0/3)</TD></TR></TABLE><P></P><TABLE CLASS="s" CELLSPACING="0" WIDTH="100%"><TR CLASS="z"><TD CLASS="l">1</TD><TD>/*******************************************************************************</TD></TR><TR><TD CLASS="l">2</TD><TD> * Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk</TD></TR><TR><TD CLASS="l">3</TD><TD> * All rights reserved. This program and the accompanying materials</TD></TR><TR><TD CLASS="l">4</TD><TD> * are made available under the terms of the Eclipse Public License v1.0</TD></TR><TR><TD CLASS="l">5</TD><TD> * which accompanies this distribution, and is available at</TD></TR><TR><TD CLASS="l">6</TD><TD> * http://www.eclipse.org/legal/epl-v10.html</TD></TR><TR><TD CLASS="l">7</TD><TD> *</TD></TR><TR><TD CLASS="l">8</TD><TD> * Contributors:</TD></TR><TR><TD CLASS="l">9</TD><TD> *     Doug Satchwell (Chase Technology Ltd) - initial API and implementation</TD></TR><TR><TD CLASS="l">10</TD><TD> *******************************************************************************/</TD></TR><TR><TD CLASS="l">11</TD><TD>package org.eclipse.wst.xsl.jaxp.debug.debugger;</TD></TR><TR><TD CLASS="l">12</TD><TD> </TD></TR><TR><TD CLASS="l">13</TD><TD>import java.io.BufferedReader;</TD></TR><TR><TD CLASS="l">14</TD><TD>import java.io.BufferedWriter;</TD></TR><TR><TD CLASS="l">15</TD><TD>import java.io.File;</TD></TR><TR><TD CLASS="l">16</TD><TD>import java.io.FileWriter;</TD></TR><TR><TD CLASS="l">17</TD><TD>import java.io.IOException;</TD></TR><TR><TD CLASS="l">18</TD><TD>import java.io.InputStreamReader;</TD></TR><TR><TD CLASS="l">19</TD><TD>import java.io.PrintWriter;</TD></TR><TR><TD CLASS="l">20</TD><TD>import java.io.Writer;</TD></TR><TR><TD CLASS="l">21</TD><TD>import java.net.InetAddress;</TD></TR><TR><TD CLASS="l">22</TD><TD>import java.net.ServerSocket;</TD></TR><TR><TD CLASS="l">23</TD><TD>import java.net.Socket;</TD></TR><TR><TD CLASS="l">24</TD><TD>import java.net.URL;</TD></TR><TR><TD CLASS="l">25</TD><TD>import java.util.Map;</TD></TR><TR><TD CLASS="l">26</TD><TD>import java.util.Properties;</TD></TR><TR><TD CLASS="l">27</TD><TD> </TD></TR><TR><TD CLASS="l">28</TD><TD>import javax.xml.transform.Source;</TD></TR><TR><TD CLASS="l">29</TD><TD>import javax.xml.transform.Transformer;</TD></TR><TR><TD CLASS="l">30</TD><TD>import javax.xml.transform.TransformerConfigurationException;</TD></TR><TR><TD CLASS="l">31</TD><TD>import javax.xml.transform.TransformerFactory;</TD></TR><TR><TD CLASS="l">32</TD><TD>import javax.xml.transform.URIResolver;</TD></TR><TR><TD CLASS="l">33</TD><TD>import javax.xml.transform.sax.SAXSource;</TD></TR><TR><TD CLASS="l">34</TD><TD> </TD></TR><TR><TD CLASS="l">35</TD><TD>import org.apache.commons.logging.Log;</TD></TR><TR><TD CLASS="l">36</TD><TD>import org.apache.commons.logging.LogFactory;</TD></TR><TR><TD CLASS="l">37</TD><TD>import org.eclipse.wst.xsl.jaxp.debug.invoker.IProcessorInvoker;</TD></TR><TR><TD CLASS="l">38</TD><TD>import org.eclipse.wst.xsl.jaxp.debug.invoker.PipelineDefinition;</TD></TR><TR><TD CLASS="l">39</TD><TD>import org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException;</TD></TR><TR><TD CLASS="l">40</TD><TD>import org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker;</TD></TR><TR><TD CLASS="l">41</TD><TD>import org.xml.sax.InputSource;</TD></TR><TR><TD CLASS="l">42</TD><TD> </TD></TR><TR><TD CLASS="l">43</TD><TD>/**</TD></TR><TR><TD CLASS="l">44</TD><TD> * The entry point to the debug process which is responsible for configuring a debugger </TD></TR><TR><TD CLASS="l">45</TD><TD> * and then communicating with the Eclipse process via sockets using a common set of commands.</TD></TR><TR><TD CLASS="l">46</TD><TD> * </TD></TR><TR><TD CLASS="l">47</TD><TD> * &lt;ul&gt;</TD></TR><TR><TD CLASS="l">48</TD><TD> * &lt;li&gt;instantiates an implementation of &lt;code&gt;IXSLDebugger&lt;/code&gt;</TD></TR><TR><TD CLASS="l">49</TD><TD> * &lt;li&gt;configures the debugger with the transformation pipeline</TD></TR><TR><TD CLASS="l">50</TD><TD> * &lt;li&gt;starts the debugger in a separate thread</TD></TR><TR><TD CLASS="l">51</TD><TD> * &lt;li&gt;the main thread is then used to listen to incoming requests and call the appropriate debugger methods</TD></TR><TR><TD CLASS="l">52</TD><TD> * &lt;/ul&gt;</TD></TR><TR><TD CLASS="l">53</TD><TD> * </TD></TR><TR><TD CLASS="l"><A NAME="0">54</A></TD><TD> * @author Doug Satchwell</TD></TR><TR><TD CLASS="l">55</TD><TD> */</TD></TR><TR CLASS="z"><TD CLASS="l">56</TD><TD>public class DebugRunner</TD></TR><TR><TD CLASS="l">57</TD><TD>{</TD></TR><TR CLASS="z"><TD CLASS="l">58</TD><TD>        private static final Log log = LogFactory.getLog(DebugRunner.class);</TD></TR><TR><TD CLASS="l">59</TD><TD> </TD></TR><TR><TD CLASS="l">60</TD><TD>        private final BufferedReader requestIn;</TD></TR><TR><TD CLASS="l">61</TD><TD>        private final Writer requestOut;</TD></TR><TR><TD CLASS="l">62</TD><TD>        private final Writer eventOut;</TD></TR><TR><TD CLASS="l">63</TD><TD>        private final Writer generatedStream;</TD></TR><TR><TD CLASS="l">64</TD><TD>        private Socket eventSocket;</TD></TR><TR><TD CLASS="l">65</TD><TD>        private Socket requestSocket;</TD></TR><TR><TD CLASS="l">66</TD><TD>        private Socket generateSocket;</TD></TR><TR><TD CLASS="l">67</TD><TD> </TD></TR><TR><TD CLASS="l">68</TD><TD>        /**</TD></TR><TR><TD CLASS="l">69</TD><TD>         * Create a new instance of this using the supplied readers and writers.</TD></TR><TR><TD CLASS="l">70</TD><TD>         * </TD></TR><TR><TD CLASS="l"><A NAME="2">71</A></TD><TD>         * @param requestIn the reader for reading incoming requests</TD></TR><TR><TD CLASS="l">72</TD><TD>         * @param requestOut the writer for acknowledging requests</TD></TR><TR><TD CLASS="l">73</TD><TD>         * @param eventOut the writer for publishing debug events</TD></TR><TR><TD CLASS="l">74</TD><TD>         */</TD></TR><TR CLASS="z"><TD CLASS="l">75</TD><TD>        public DebugRunner(BufferedReader requestIn, PrintWriter requestOut, PrintWriter eventOut, PrintWriter generatedStream)</TD></TR><TR><TD CLASS="l">76</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">77</TD><TD>                this.requestOut = requestOut;</TD></TR><TR CLASS="z"><TD CLASS="l">78</TD><TD>                this.requestIn = requestIn;</TD></TR><TR CLASS="z"><TD CLASS="l">79</TD><TD>                this.eventOut = eventOut;</TD></TR><TR CLASS="z"><TD CLASS="l">80</TD><TD>                this.generatedStream = generatedStream;</TD></TR><TR CLASS="z"><TD CLASS="l">81</TD><TD>        }</TD></TR><TR><TD CLASS="l">82</TD><TD> </TD></TR><TR><TD CLASS="l">83</TD><TD>        /**</TD></TR><TR><TD CLASS="l">84</TD><TD>         * Create a new instance of this given a request port and an event port.</TD></TR><TR><TD CLASS="l">85</TD><TD>         * </TD></TR><TR><TD CLASS="l"><A NAME="3">86</A></TD><TD>         * @param requestPort the port to listen to requests and send acknowledgements</TD></TR><TR><TD CLASS="l">87</TD><TD>         * @param eventPort the port for publishing debug events</TD></TR><TR><TD CLASS="l">88</TD><TD>         * @throws IOException if there was a problem opening a socket</TD></TR><TR><TD CLASS="l">89</TD><TD>         */</TD></TR><TR CLASS="z"><TD CLASS="l">90</TD><TD>        public DebugRunner(int requestPort, int eventPort, int generatePort) throws IOException</TD></TR><TR><TD CLASS="l">91</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">92</TD><TD>                requestSocket = getSocket(requestPort);</TD></TR><TR CLASS="z"><TD CLASS="l">93</TD><TD>                eventSocket = getSocket(eventPort);</TD></TR><TR CLASS="z"><TD CLASS="l">94</TD><TD>                generateSocket = getSocket(generatePort);</TD></TR><TR CLASS="z"><TD CLASS="l">95</TD><TD>                requestIn = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()));</TD></TR><TR CLASS="z"><TD CLASS="l">96</TD><TD>                requestOut = new PrintWriter(requestSocket.getOutputStream(), true);</TD></TR><TR CLASS="z"><TD CLASS="l">97</TD><TD>                eventOut = new PrintWriter(eventSocket.getOutputStream(), true);</TD></TR><TR CLASS="z"><TD CLASS="l">98</TD><TD>                generatedStream = new BufferedWriter(new PrintWriter(generateSocket.getOutputStream(), true));</TD></TR><TR CLASS="z"><TD CLASS="l">99</TD><TD>        }</TD></TR><TR><TD CLASS="l">100</TD><TD> </TD></TR><TR><TD CLASS="l">101</TD><TD>        /**</TD></TR><TR><TD CLASS="l">102</TD><TD>         * This method starts the given debugger in its own thread, and blocks while waiting </TD></TR><TR><TD CLASS="l">103</TD><TD>         * for incoming requests from the request port, until there are no more requests.</TD></TR><TR><TD CLASS="l">104</TD><TD>         * </TD></TR><TR><TD CLASS="l">105</TD><TD>         * @param debugger the debugger to start in a thread</TD></TR><TR><TD CLASS="l">106</TD><TD>         * @throws TransformationException if a problem occurred while transforming</TD></TR><TR><TD CLASS="l"><A NAME="8">107</A></TD><TD>         * @throws IOException </TD></TR><TR><TD CLASS="l">108</TD><TD>         */</TD></TR><TR><TD CLASS="l">109</TD><TD>        public void loop(IXSLDebugger debugger) throws TransformationException, IOException</TD></TR><TR><TD CLASS="l">110</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">111</TD><TD>                debugger.setEventWriter(eventOut);</TD></TR><TR CLASS="z"><TD CLASS="l">112</TD><TD>                debugger.setGeneratedWriter(generatedStream);</TD></TR><TR><TD CLASS="l">113</TD><TD>                String inputLine, response;</TD></TR><TR><TD CLASS="l">114</TD><TD>                // signal we are ready to receive requests</TD></TR><TR CLASS="z"><TD CLASS="l">115</TD><TD>                eventOut.write(&#34;ready\n&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">116</TD><TD>                eventOut.flush();</TD></TR><TR CLASS="z"><TD CLASS="l">117</TD><TD>                log.debug(&#34;entering loop&#34;); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">118</TD><TD>                try</TD></TR><TR><TD CLASS="l">119</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">120</TD><TD>                        while ((inputLine = requestIn.readLine()) != null)</TD></TR><TR><TD CLASS="l">121</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">122</TD><TD>                                response = inputLine;</TD></TR><TR CLASS="z"><TD CLASS="l">123</TD><TD>                                log.debug(&#34;REQUEST:&#34; + inputLine); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">124</TD><TD>                                Thread debuggerThread = null;</TD></TR><TR CLASS="z"><TD CLASS="l">125</TD><TD>                                if (DebugConstants.REQUEST_START.equals(inputLine))</TD></TR><TR><TD CLASS="l">126</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">127</TD><TD>                                        debuggerThread = new Thread(debugger, &#34;debugger&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">128</TD><TD>                                        debuggerThread.start();</TD></TR><TR><TD CLASS="l">129</TD><TD>                                }</TD></TR><TR><TD CLASS="l">130</TD><TD>                                /*</TD></TR><TR><TD CLASS="l">131</TD><TD>                                 * else if (REQUEST_QUIT.equals(inputLine)) { }</TD></TR><TR><TD CLASS="l">132</TD><TD>                                 */</TD></TR><TR CLASS="z"><TD CLASS="l">133</TD><TD>                                else if (DebugConstants.REQUEST_STEP_INTO.equals(inputLine))</TD></TR><TR><TD CLASS="l">134</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">135</TD><TD>                                        debugger.stepInto();</TD></TR><TR><TD CLASS="l">136</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">137</TD><TD>                                else if (DebugConstants.REQUEST_STEP_OVER.equals(inputLine))</TD></TR><TR><TD CLASS="l">138</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">139</TD><TD>                                        debugger.stepOver();</TD></TR><TR><TD CLASS="l">140</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">141</TD><TD>                                else if (DebugConstants.REQUEST_STEP_RETURN.equals(inputLine))</TD></TR><TR><TD CLASS="l">142</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">143</TD><TD>                                        debugger.stepReturn();</TD></TR><TR><TD CLASS="l">144</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">145</TD><TD>                                else if (DebugConstants.REQUEST_SUSPEND.equals(inputLine))</TD></TR><TR><TD CLASS="l">146</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">147</TD><TD>                                        debugger.suspend();</TD></TR><TR><TD CLASS="l">148</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">149</TD><TD>                                else if (DebugConstants.REQUEST_RESUME.equals(inputLine))</TD></TR><TR><TD CLASS="l">150</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">151</TD><TD>                                        debugger.resume();</TD></TR><TR><TD CLASS="l">152</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">153</TD><TD>                                else if (DebugConstants.REQUEST_STACK.equals(inputLine))</TD></TR><TR><TD CLASS="l">154</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">155</TD><TD>                                        response = debugger.stack();</TD></TR><TR><TD CLASS="l">156</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">157</TD><TD>                                else if (inputLine.startsWith(DebugConstants.REQUEST_VARIABLE))</TD></TR><TR><TD CLASS="l">158</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">159</TD><TD>                                        String data = inputLine.substring(DebugConstants.REQUEST_VARIABLE.length() + 1);</TD></TR><TR CLASS="z"><TD CLASS="l">160</TD><TD>                                        int id = Integer.parseInt(data);</TD></TR><TR CLASS="z"><TD CLASS="l">161</TD><TD>                                        Variable var = debugger.getVariable(id);</TD></TR><TR CLASS="z"><TD CLASS="l">162</TD><TD>                                        log.debug(&#34;var &#34;+id+&#34; = &#34;+var); //$NON-NLS-1$ //$NON-NLS-2$</TD></TR><TR CLASS="z"><TD CLASS="l">163</TD><TD>                                        response = var.getScope() + &#34;&amp;&#34; + var.getName(); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">164</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">165</TD><TD>                                else if (inputLine.startsWith(DebugConstants.REQUEST_VALUE))</TD></TR><TR><TD CLASS="l">166</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">167</TD><TD>                                        String data = inputLine.substring(DebugConstants.REQUEST_VALUE.length() + 1);</TD></TR><TR CLASS="z"><TD CLASS="l">168</TD><TD>                                        int id = Integer.parseInt(data);</TD></TR><TR CLASS="z"><TD CLASS="l">169</TD><TD>                                        Variable var = debugger.getVariable(id);</TD></TR><TR CLASS="z"><TD CLASS="l">170</TD><TD>                                        response =  var.getType() + &#34;&amp;&#34; + var.getValueFirstLine(); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">171</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">172</TD><TD>                                else if (inputLine.startsWith(DebugConstants.REQUEST_ADD_BREAKPOINT))</TD></TR><TR><TD CLASS="l">173</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">174</TD><TD>                                        int index = inputLine.lastIndexOf(' ');</TD></TR><TR CLASS="z"><TD CLASS="l">175</TD><TD>                                        String file = inputLine.substring(DebugConstants.REQUEST_ADD_BREAKPOINT.length() + 1, index);</TD></TR><TR CLASS="z"><TD CLASS="l">176</TD><TD>                                        String line = inputLine.substring(index + 1);</TD></TR><TR CLASS="z"><TD CLASS="l">177</TD><TD>                                        BreakPoint breakpoint = new BreakPoint(file, Integer.parseInt(line));</TD></TR><TR CLASS="z"><TD CLASS="l">178</TD><TD>                                        debugger.addBreakpoint(breakpoint);</TD></TR><TR><TD CLASS="l">179</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">180</TD><TD>                                else if (inputLine.startsWith(DebugConstants.REQUEST_REMOVE_BREAKPOINT))</TD></TR><TR><TD CLASS="l">181</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">182</TD><TD>                                        int index = inputLine.lastIndexOf(' ');</TD></TR><TR CLASS="z"><TD CLASS="l">183</TD><TD>                                        String file = inputLine.substring(DebugConstants.REQUEST_REMOVE_BREAKPOINT.length() + 1, index);</TD></TR><TR CLASS="z"><TD CLASS="l">184</TD><TD>                                        String line = inputLine.substring(index + 1);</TD></TR><TR CLASS="z"><TD CLASS="l">185</TD><TD>                                        BreakPoint breakpoint = new BreakPoint(file, Integer.parseInt(line));</TD></TR><TR CLASS="z"><TD CLASS="l">186</TD><TD>                                        debugger.removeBreakpoint(breakpoint);</TD></TR><TR><TD CLASS="l">187</TD><TD>                                }</TD></TR><TR><TD CLASS="l">188</TD><TD>                                else</TD></TR><TR><TD CLASS="l">189</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">190</TD><TD>                                        response = &#34;What?&#34;; //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">191</TD><TD>                                }</TD></TR><TR><TD CLASS="l">192</TD><TD>                                // confirm request</TD></TR><TR CLASS="z"><TD CLASS="l">193</TD><TD>                                log.debug(&#34;RESPONSE:&#34; + response); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">194</TD><TD>                                requestOut.write(response + &#34;\n&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">195</TD><TD>                                requestOut.flush();</TD></TR><TR><TD CLASS="l">196</TD><TD> </TD></TR><TR><TD CLASS="l">197</TD><TD>                                /*</TD></TR><TR><TD CLASS="l">198</TD><TD>                                 * if (REQUEST_QUIT.equals(inputLine)) { waitForFinish(debuggerThread); break; }</TD></TR><TR><TD CLASS="l">199</TD><TD>                                 */</TD></TR><TR><TD CLASS="l">200</TD><TD>                        }</TD></TR><TR><TD CLASS="l">201</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">202</TD><TD>                catch (Exception e)</TD></TR><TR><TD CLASS="l">203</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">204</TD><TD>                        throw new TransformationException(e.getMessage(), e);</TD></TR><TR><TD CLASS="l">205</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">206</TD><TD>                log.debug(&#34;exited loop&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">207</TD><TD>                eventOut.write(&#34;terminated\n&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">208</TD><TD>                eventOut.flush();</TD></TR><TR CLASS="z"><TD CLASS="l">209</TD><TD>        }</TD></TR><TR><TD CLASS="l">210</TD><TD> </TD></TR><TR><TD CLASS="l">211</TD><TD>        /**</TD></TR><TR><TD CLASS="l">212</TD><TD>         * Dispose of this - close all open sockets.</TD></TR><TR><TD CLASS="l"><A NAME="5">213</A></TD><TD>         * @throws IOException </TD></TR><TR><TD CLASS="l">214</TD><TD>         */</TD></TR><TR><TD CLASS="l">215</TD><TD>        public void dispose() throws IOException</TD></TR><TR><TD CLASS="l">216</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">217</TD><TD>                if (requestIn != null)</TD></TR><TR><TD CLASS="l">218</TD><TD>                {</TD></TR><TR><TD CLASS="l">219</TD><TD>                        try</TD></TR><TR><TD CLASS="l">220</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">221</TD><TD>                                requestIn.close();</TD></TR><TR><TD CLASS="l">222</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">223</TD><TD>                        catch (IOException e)</TD></TR><TR><TD CLASS="l">224</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">225</TD><TD>                                log.error(&#34;Could not close request input stream&#34;, e); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">226</TD><TD>                        }</TD></TR><TR><TD CLASS="l">227</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">228</TD><TD>                if (requestOut != null)</TD></TR><TR><TD CLASS="l">229</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">230</TD><TD>                        requestOut.close();</TD></TR><TR><TD CLASS="l">231</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">232</TD><TD>                if (eventOut != null)</TD></TR><TR><TD CLASS="l">233</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">234</TD><TD>                        eventOut.close();</TD></TR><TR><TD CLASS="l">235</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">236</TD><TD>                if (requestSocket != null)</TD></TR><TR><TD CLASS="l">237</TD><TD>                {</TD></TR><TR><TD CLASS="l">238</TD><TD>                        try</TD></TR><TR><TD CLASS="l">239</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">240</TD><TD>                                requestSocket.close();</TD></TR><TR><TD CLASS="l">241</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">242</TD><TD>                        catch (IOException e)</TD></TR><TR><TD CLASS="l">243</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">244</TD><TD>                                log.error(&#34;Could not close request socket&#34;, e); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">245</TD><TD>                        }</TD></TR><TR><TD CLASS="l">246</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">247</TD><TD>                if (eventSocket != null)</TD></TR><TR><TD CLASS="l">248</TD><TD>                {</TD></TR><TR><TD CLASS="l">249</TD><TD>                        try</TD></TR><TR><TD CLASS="l">250</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">251</TD><TD>                                eventSocket.close();</TD></TR><TR><TD CLASS="l">252</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">253</TD><TD>                        catch (IOException e)</TD></TR><TR><TD CLASS="l">254</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">255</TD><TD>                                log.error(&#34;Could not close event socket&#34;, e); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">256</TD><TD>                        }</TD></TR><TR><TD CLASS="l">257</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="6">258</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">259</TD><TD> </TD></TR><TR><TD CLASS="l">260</TD><TD>        private static Socket getSocket(int port) throws IOException</TD></TR><TR><TD CLASS="l">261</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">262</TD><TD>                InetAddress localhost = InetAddress.getByName(&#34;localhost&#34;); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">263</TD><TD>                ServerSocket serverSocket = new ServerSocket(port, 5, localhost);</TD></TR><TR CLASS="z"><TD CLASS="l">264</TD><TD>                Socket clientSocket = serverSocket.accept();</TD></TR><TR CLASS="z"><TD CLASS="l">265</TD><TD>                serverSocket.close();</TD></TR><TR CLASS="z"><TD CLASS="l">266</TD><TD>                return clientSocket;</TD></TR><TR><TD CLASS="l">267</TD><TD>        }</TD></TR><TR><TD CLASS="l">268</TD><TD> </TD></TR><TR><TD CLASS="l">269</TD><TD>        /**</TD></TR><TR><TD CLASS="l">270</TD><TD>         * Expected arguments:</TD></TR><TR><TD CLASS="l">271</TD><TD>         * </TD></TR><TR><TD CLASS="l">272</TD><TD>         * &lt;ol&gt;</TD></TR><TR><TD CLASS="l">273</TD><TD>         * &lt;li&gt;the class name of the invoker</TD></TR><TR><TD CLASS="l">274</TD><TD>         * &lt;li&gt;the file name of the XML launch configuration file</TD></TR><TR><TD CLASS="l">275</TD><TD>         * &lt;li&gt;the URL of the source document</TD></TR><TR><TD CLASS="l">276</TD><TD>         * &lt;li&gt;the file of the output document</TD></TR><TR><TD CLASS="l">277</TD><TD>         * &lt;li&gt;not used (anything)</TD></TR><TR><TD CLASS="l">278</TD><TD>         * &lt;li&gt;the class name of the &lt;code&gt;IXSLDebugger&lt;/code&gt; instance</TD></TR><TR><TD CLASS="l">279</TD><TD>         * &lt;li&gt;the port used for requests</TD></TR><TR><TD CLASS="l">280</TD><TD>         * &lt;li&gt;the port used for debug events</TD></TR><TR><TD CLASS="l">281</TD><TD>         * &lt;li&gt;the port used for generate events</TD></TR><TR><TD CLASS="l">282</TD><TD>         * &lt;/ol&gt;</TD></TR><TR><TD CLASS="l">283</TD><TD>         * </TD></TR><TR><TD CLASS="l"><A NAME="9">284</A></TD><TD>         * @param args</TD></TR><TR><TD CLASS="l">285</TD><TD>         */</TD></TR><TR><TD CLASS="l">286</TD><TD>        public static void main(String[] args)</TD></TR><TR><TD CLASS="l">287</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">288</TD><TD>                log.info(&#34;javax.xml.transform.TransformerFactory=&#34; + System.getProperty(&#34;javax.xml.transform.TransformerFactory&#34;));  //$NON-NLS-1$//$NON-NLS-2$</TD></TR><TR CLASS="z"><TD CLASS="l">289</TD><TD>                log.info(&#34;java.endorsed.dirs=&#34; + System.getProperty(&#34;java.endorsed.dirs&#34;));  //$NON-NLS-1$//$NON-NLS-2$</TD></TR><TR><TD CLASS="l">290</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">291</TD><TD>                String invokerClassName = args[0];</TD></TR><TR CLASS="z"><TD CLASS="l">292</TD><TD>                File launchFile = new File(args[1]);</TD></TR><TR CLASS="z"><TD CLASS="l">293</TD><TD>                String src = args[2];</TD></TR><TR CLASS="z"><TD CLASS="l">294</TD><TD>                String target = args[3];</TD></TR><TR CLASS="z"><TD CLASS="l">295</TD><TD>                String debuggerClassName = args[5];</TD></TR><TR><TD CLASS="l">296</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">297</TD><TD>                log.info(&#34;src: &#34; + src); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">298</TD><TD>                log.info(&#34;target: &#34; + target); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">299</TD><TD>                log.info(&#34;launchFile: &#34; + launchFile); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">300</TD><TD>                log.info(&#34;debugger: &#34; + debuggerClassName); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">301</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">302</TD><TD>                DebugRunner debugRunner = null;</TD></TR><TR><TD CLASS="l"><A NAME="a">303</A></TD><TD>                try</TD></TR><TR><TD CLASS="l">304</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">305</TD><TD>                        final IXSLDebugger debugger = createDebugger(debuggerClassName);</TD></TR><TR><TD CLASS="l">306</TD><TD>                        // create the invoker</TD></TR><TR CLASS="z"><TD CLASS="l">307</TD><TD>                        IProcessorInvoker invoker = new JAXPSAXProcessorInvoker()</TD></TR><TR><TD CLASS="l"><A NAME="e">308</A></TD><TD>                        {</TD></TR><TR><TD CLASS="l">309</TD><TD> </TD></TR><TR><TD CLASS="l">310</TD><TD>                                protected TransformerFactory createTransformerFactory()</TD></TR><TR><TD CLASS="l">311</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">312</TD><TD>                                        TransformerFactory tFactory = super.createTransformerFactory();</TD></TR><TR CLASS="z"><TD CLASS="l">313</TD><TD>                                        debugger.setTransformerFactory(tFactory);</TD></TR><TR CLASS="z"><TD CLASS="l">314</TD><TD>                                        return tFactory;</TD></TR><TR><TD CLASS="l"><A NAME="d">315</A></TD><TD>                                }</TD></TR><TR><TD CLASS="l">316</TD><TD> </TD></TR><TR><TD CLASS="l">317</TD><TD>                                public void addStylesheet(URL stylesheet, Map parameters, Properties outputProperties, URIResolver resolver) throws TransformerConfigurationException</TD></TR><TR><TD CLASS="l">318</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">319</TD><TD>                                        InputSource inputsource = new InputSource(stylesheet.toString());</TD></TR><TR><TD CLASS="l">320</TD><TD>                                        // if required in future, parse the document with line numbers (to get the end line numbers)</TD></TR><TR><TD CLASS="l">321</TD><TD>//                                        XMLReaderWrapper reader = new XMLReaderWrapper(createReader());</TD></TR><TR><TD CLASS="l">322</TD><TD>//                                        SAXSource source = new SAXSource(reader,inputsource);</TD></TR><TR CLASS="z"><TD CLASS="l">323</TD><TD>                                        addStylesheet(new SAXSource(inputsource), resolver, parameters, outputProperties);</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="c">324</A></TD><TD>                                }</TD></TR><TR><TD CLASS="l">325</TD><TD>                                </TD></TR><TR><TD CLASS="l">326</TD><TD>                                protected Transformer addStylesheet(Source source, URIResolver resolver, Map parameters, Properties outputProperties) throws TransformerConfigurationException</TD></TR><TR><TD CLASS="l">327</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">328</TD><TD>                                        Transformer transformer = super.addStylesheet(source, resolver, parameters, outputProperties);</TD></TR><TR CLASS="z"><TD CLASS="l">329</TD><TD>                                        debugger.addTransformer(transformer);</TD></TR><TR CLASS="z"><TD CLASS="l">330</TD><TD>                                        return transformer;</TD></TR><TR><TD CLASS="l">331</TD><TD>                                }</TD></TR><TR><TD CLASS="l">332</TD><TD>                        };</TD></TR><TR><TD CLASS="l">333</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">334</TD><TD>                        if (args.length == 9)</TD></TR><TR><TD CLASS="l">335</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">336</TD><TD>                                int requestPort = Integer.parseInt(args[6]);</TD></TR><TR CLASS="z"><TD CLASS="l">337</TD><TD>                                int eventPort = Integer.parseInt(args[7]);</TD></TR><TR CLASS="z"><TD CLASS="l">338</TD><TD>                                int generatePort = Integer.parseInt(args[8]);</TD></TR><TR><TD CLASS="l">339</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">340</TD><TD>                                log.debug(&#34;requestPort: &#34; + requestPort); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">341</TD><TD>                                log.debug(&#34;eventPort: &#34; + eventPort); //$NON-NLS-1$</TD></TR><TR CLASS="z"><TD CLASS="l">342</TD><TD>                                log.debug(&#34;generatePort: &#34; + generatePort); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">343</TD><TD> </TD></TR><TR><TD CLASS="l">344</TD><TD>                                try</TD></TR><TR><TD CLASS="l">345</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">346</TD><TD>                                        debugRunner = new DebugRunner(requestPort, eventPort, generatePort);</TD></TR><TR><TD CLASS="l">347</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">348</TD><TD>                                catch (Exception e)</TD></TR><TR><TD CLASS="l">349</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">350</TD><TD>                                        handleFatalError(&#34;Could not instantiate invoker: &#34; + invokerClassName, e); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">351</TD><TD>                                }</TD></TR><TR><TD CLASS="l">352</TD><TD>                        }</TD></TR><TR><TD CLASS="l">353</TD><TD>                        else</TD></TR><TR><TD CLASS="l">354</TD><TD>                        {</TD></TR><TR CLASS="z"><TD CLASS="l">355</TD><TD>                                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));</TD></TR><TR CLASS="z"><TD CLASS="l">356</TD><TD>                                debugRunner = new DebugRunner(br, new PrintWriter(System.out), new PrintWriter(System.err), null);</TD></TR><TR CLASS="z"><TD CLASS="l">357</TD><TD>                                System.out.println(&#34;xsl&gt;&#34;); //$NON-NLS-1$</TD></TR><TR><TD CLASS="l">358</TD><TD>                        }</TD></TR><TR><TD CLASS="l">359</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">360</TD><TD>                        PipelineDefinition pipeline = new PipelineDefinition(launchFile);</TD></TR><TR CLASS="z"><TD CLASS="l">361</TD><TD>                        pipeline.configure(invoker);</TD></TR><TR><TD CLASS="l">362</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">363</TD><TD>                        debugger.setInvoker(invoker);</TD></TR><TR CLASS="z"><TD CLASS="l">364</TD><TD>                        debugger.setSource(new URL(src));</TD></TR><TR CLASS="z"><TD CLASS="l">365</TD><TD>                        debugger.setTarget(new FileWriter(new File(target)));</TD></TR><TR><TD CLASS="l">366</TD><TD> </TD></TR><TR CLASS="z"><TD CLASS="l">367</TD><TD>                        debugRunner.loop(debugger);</TD></TR><TR><TD CLASS="l">368</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l">369</TD><TD>                catch (Exception e)</TD></TR><TR><TD CLASS="l">370</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">371</TD><TD>                        handleFatalError(e.getMessage(), e);</TD></TR><TR><TD CLASS="l">372</TD><TD>                }</TD></TR><TR><TD CLASS="l">373</TD><TD>                finally</TD></TR><TR CLASS="z"><TD CLASS="l">374</TD><TD>                {</TD></TR><TR CLASS="z"><TD CLASS="l">375</TD><TD>                        if (debugRunner != null)</TD></TR><TR><TD CLASS="l">376</TD><TD>                        {</TD></TR><TR><TD CLASS="l">377</TD><TD>                                try</TD></TR><TR><TD CLASS="l">378</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">379</TD><TD>                                        debugRunner.dispose();</TD></TR><TR><TD CLASS="l">380</TD><TD>                                }</TD></TR><TR CLASS="z"><TD CLASS="l">381</TD><TD>                                catch (IOException e)</TD></TR><TR><TD CLASS="l">382</TD><TD>                                {</TD></TR><TR CLASS="z"><TD CLASS="l">383</TD><TD>                                        handleFatalError(e.getMessage(), e);</TD></TR><TR><TD CLASS="l">384</TD><TD>                                }</TD></TR><TR><TD CLASS="l">385</TD><TD>                        }</TD></TR><TR CLASS="z"><TD CLASS="l">386</TD><TD>                }</TD></TR><TR CLASS="z"><TD CLASS="l"><A NAME="4">387</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">388</TD><TD> </TD></TR><TR><TD CLASS="l">389</TD><TD>        private static IXSLDebugger createDebugger(String classname) throws ClassNotFoundException, InstantiationException, IllegalAccessException</TD></TR><TR><TD CLASS="l">390</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">391</TD><TD>                Class clazz = Class.forName(classname);</TD></TR><TR CLASS="z"><TD CLASS="l">392</TD><TD>                return (IXSLDebugger) clazz.newInstance();</TD></TR><TR><TD CLASS="l"><A NAME="7">393</A></TD><TD>        }</TD></TR><TR><TD CLASS="l">394</TD><TD> </TD></TR><TR><TD CLASS="l">395</TD><TD>        private static void handleFatalError(String msg, Throwable t)</TD></TR><TR><TD CLASS="l">396</TD><TD>        {</TD></TR><TR CLASS="z"><TD CLASS="l">397</TD><TD>                log.fatal(msg, t);</TD></TR><TR CLASS="z"><TD CLASS="l">398</TD><TD>                System.exit(1);</TD></TR><TR CLASS="z"><TD CLASS="l">399</TD><TD>        }</TD></TR><TR><TD CLASS="l">400</TD><TD>}</TD></TR></TABLE><P></P><TABLE CLASS="hdft" CELLSPACING="0" WIDTH="100%"><TR><TD CLASS="nv">[<A HREF="../xslUnitTestCoverage.html">all classes</A>][<A HREF="56.html">org.eclipse.wst.xsl.jaxp.debug.debugger</A>]</TD></TR><TR><TD CLASS="tl"><A HREF="http://www.eclemma.org/support.html">EMMA 2.0.5312 EclEmma Fix 1</A> (C) Vladimir Roubtsov</TD></TR></TABLE></BODY></HTML>