Initial
[frank.git] / report / net / jaekl / qd / xml / ParseResult.html
1 <html>
2 <head>
3 <title>tests coverage</title>
4 <link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
5 <script type="text/javascript" src="../../../../sorttable.js"></script>
6 <script type="text/javascript">
7   targetPage = "" + window.location.search;
8   if (targetPage != "" && targetPage != "undefined")
9     targetPage = targetPage.substring(1);
10   if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
11     targetPage = "undefined";
12   function validURL(url) {
13     var pos = url.indexOf(".html");
14     if (pos == -1 || pos != url.length - 5)
15       return false;
16     var allowNumber = false;
17     var allowSep = false;
18     var seenDot = false;
19     for (var i = 0; i < url.length - 5; i++) {
20       var ch = url.charAt(i);
21       if ('a' <= ch && ch <= 'z' ||
22           'A' <= ch && ch <= 'Z' ||
23           ch == '$' ||
24           ch == '_') {
25             allowNumber = true;
26             allowSep = true;
27       } else if ('0' <= ch && ch <= '9' ||
28                  ch == '-') {
29                    if (!allowNumber)
30                      return false;
31       } else if (ch == '/' || ch == '.') {
32         if (!allowSep)
33           return false;
34         allowNumber = false;
35         allowSep = false;
36         if (ch == '.')
37           seenDot = true;
38         if (ch == '/' && seenDot)
39           return false;
40       } else {
41         return false;
42       }
43     }
44     return true;
45   }
46   function loadFrames() {
47     if (targetPage != "" && targetPage != "undefined")
48       top.classFrame.location = top.targetPage;
49   }
50 </script>
51 </head>
52 <body>
53 <table>
54 <tr>
55 <td>
56 <a href="../../../../index.html?net/jaekl/qd/xml/ParseResult.html" target="_top">Frames</a>
57 <a href="ParseResult.html" target="_top">No Frames</a>
58 </td>
59 </tr>
60 </table>
61 <p>
62  <table cellspacing="0" cellpadding="0"class="report">
63  <tr class="report">
64  <th class="report">&nbsp;</th>
65  <th class="report">%method</th>
66  <th class="report">%block</th>
67  <th class="report">%branch</th>
68  <th class="report">%line</th>
69  </tr>
70  <tr class="report">
71  <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult</span></td>
72  <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>89</b>%(8/9)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width="  89"></td><td class="percentUnCovered" width="11.0"></td></tr></table></td></tr></table></td>
73  <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>81</b>%(38/47)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width="  81"></td><td class="percentUnCovered" width="19.0"></td></tr></table></td></tr></table></td>
74  <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>74</b>%(25/34)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width="  74"></td><td class="percentUnCovered" width="26.0"></td></tr></table></td></tr></table></td>
75  <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>91</b>%(60/66)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width="  91"></td><td class="percentUnCovered" width="9.0"></td></tr></table></td></tr></table></td>
76  </tr>
77  </table>
78  <p>
79  <p>
80  <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
81  <tr class="report">
82  <th class="report">hit count</th>
83  <th class="report">method  name</th>
84  <th class="report">method modifiers</th>
85  <th class="report">method signature</th>
86  </tr>
87  <tr class="report">
88  <td class="reportValue_covered"><span class="text">1</span></td>
89  <td class="reportText"><span class="text"><a href="#src_19">&lt;clinit&gt;</a></span></td>
90  <td class="reportText"><span class="text">[static]</span></td>
91  <td class="reportText"><span class="text">void &lt;clinit&gt;()</span></td>
92  </tr>
93  <tr class="report">
94  <td class="reportValue_covered"><span class="text">45</span></td>
95  <td class="reportText"><span class="text"><a href="#src_32">&lt;init&gt;</a></span></td>
96  <td class="reportText"><span class="text">[public]</span></td>
97  <td class="reportText"><span class="text">void &lt;init&gt;(java.lang.String,java.lang.String[],java.lang.Object[][])</span></td>
98  </tr>
99  <tr class="report">
100  <td class="reportValue_covered"><span class="text">195</span></td>
101  <td class="reportText"><span class="text"><a href="#src_61">characters</a></span></td>
102  <td class="reportText"><span class="text">[public]</span></td>
103  <td class="reportText"><span class="text">void characters(char[],int,int)</span></td>
104  </tr>
105  <tr class="report">
106  <td class="reportValue_covered"><span class="text">20</span></td>
107  <td class="reportText"><span class="text"><a href="#src_65">collectParsedChildren</a></span></td>
108  <td class="reportText"><span class="text">[protected]</span></td>
109  <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult[] collectParsedChildren(java.lang.Class)</span></td>
110  </tr>
111  <tr class="report">
112  <td class="reportValue_covered"><span class="text">216</span></td>
113  <td class="reportText"><span class="text"><a href="#src_82">endElement</a></span></td>
114  <td class="reportText"><span class="text">[public]</span></td>
115  <td class="reportText"><span class="text">boolean endElement(java.lang.String,java.lang.String,java.lang.String)</span></td>
116  </tr>
117  <tr class="report">
118  <td class="reportValue_covered"><span class="text">1</span></td>
119  <td class="reportText"><span class="text"><a href="#src_56">getTagName</a></span></td>
120  <td class="reportText"><span class="text">[public]</span></td>
121  <td class="reportText"><span class="text">java.lang.String getTagName()</span></td>
122  </tr>
123  <tr class="report">
124  <td class="reportValue_uncovered"><span class="text">0</span></td>
125  <td class="reportText"><span class="text"><a href="#src_57">haveSeenMyTag</a></span></td>
126  <td class="reportText"><span class="text">[public]</span></td>
127  <td class="reportText"><span class="text">boolean haveSeenMyTag()</span></td>
128  </tr>
129  <tr class="report">
130  <td class="reportValue_covered"><span class="text">255</span></td>
131  <td class="reportText"><span class="text"><a href="#src_116">startElement</a></span></td>
132  <td class="reportText"><span class="text">[public]</span></td>
133  <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes)</span></td>
134  </tr>
135  <tr class="report">
136  <td class="reportValue_covered"><span class="text">31</span></td>
137  <td class="reportText"><span class="text"><a href="#src_164">validate</a></span></td>
138  <td class="reportText"><span class="text">[public]</span></td>
139  <td class="reportText"><span class="text">void validate()</span></td>
140  </tr>
141  </table>
142  <p>
143  <table cellspacing="0" cellpadding="0" class="src">
144  <tr>
145  <td class="numLine">&nbsp;1</td>
146  <td class="nbHits">&nbsp;</td>
147  <td class="src"><pre class="src">&nbsp;<span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
148  </tr>
149  <tr>
150  <td class="numLine">&nbsp;2</td>
151  <td class="nbHits">&nbsp;</td>
152  <td class="src"><pre class="src">&nbsp;</pre></td>
153  </tr>
154  <tr>
155  <td class="numLine">&nbsp;3</td>
156  <td class="nbHits">&nbsp;</td>
157  <td class="src"><pre class="src">&nbsp;<span Class="comment">// Abstract class representing the result of parsing an XML Element.</span></pre></td>
158  </tr>
159  <tr>
160  <td class="numLine">&nbsp;4</td>
161  <td class="nbHits">&nbsp;</td>
162  <td class="src"><pre class="src">&nbsp;<span Class="comment">// A class derived from this one will know how to parse a subtree inside an XML file, and </span></pre></td>
163  </tr>
164  <tr>
165  <td class="numLine">&nbsp;5</td>
166  <td class="nbHits">&nbsp;</td>
167  <td class="src"><pre class="src">&nbsp;<span Class="comment">// will contain the result of that parse within itself when the parse has completed.</span></pre></td>
168  </tr>
169  <tr>
170  <td class="numLine">&nbsp;6</td>
171  <td class="nbHits">&nbsp;</td>
172  <td class="src"><pre class="src">&nbsp;<span Class="comment">//</span></pre></td>
173  </tr>
174  <tr>
175  <td class="numLine">&nbsp;7</td>
176  <td class="nbHits">&nbsp;</td>
177  <td class="src"><pre class="src">&nbsp;<span Class="comment">// Note that this code will need to be augmented and fixed if XML namespace support is desired.</span></pre></td>
178  </tr>
179  <tr>
180  <td class="numLine">&nbsp;8</td>
181  <td class="nbHits">&nbsp;</td>
182  <td class="src"><pre class="src">&nbsp;</pre></td>
183  </tr>
184  <tr>
185  <td class="numLine">&nbsp;9</td>
186  <td class="nbHits">&nbsp;</td>
187  <td class="src"><pre class="src">&nbsp;<span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
188  </tr>
189  <tr>
190  <td class="numLine">&nbsp;10</td>
191  <td class="nbHits">&nbsp;</td>
192  <td class="src"><pre class="src">&nbsp;</pre></td>
193  </tr>
194  <tr>
195  <td class="numLine">&nbsp;11</td>
196  <td class="nbHits">&nbsp;</td>
197  <td class="src"><pre class="src">&nbsp;<span Class="keyword">import</span> java.util.ArrayList;</pre></td>
198  </tr>
199  <tr>
200  <td class="numLine">&nbsp;12</td>
201  <td class="nbHits">&nbsp;</td>
202  <td class="src"><pre class="src">&nbsp;<span Class="keyword">import</span> java.util.HashMap;</pre></td>
203  </tr>
204  <tr>
205  <td class="numLine">&nbsp;13</td>
206  <td class="nbHits">&nbsp;</td>
207  <td class="src"><pre class="src">&nbsp;<span Class="keyword">import</span> java.util.HashSet;</pre></td>
208  </tr>
209  <tr>
210  <td class="numLine">&nbsp;14</td>
211  <td class="nbHits">&nbsp;</td>
212  <td class="src"><pre class="src">&nbsp;<span Class="keyword">import</span> java.util.Iterator;</pre></td>
213  </tr>
214  <tr>
215  <td class="numLine">&nbsp;15</td>
216  <td class="nbHits">&nbsp;</td>
217  <td class="src"><pre class="src">&nbsp;<span Class="keyword">import</span> java.util.Stack;</pre></td>
218  </tr>
219  <tr>
220  <td class="numLine">&nbsp;16</td>
221  <td class="nbHits">&nbsp;</td>
222  <td class="src"><pre class="src">&nbsp;</pre></td>
223  </tr>
224  <tr>
225  <td class="numLine">&nbsp;17</td>
226  <td class="nbHits">&nbsp;</td>
227  <td class="src"><pre class="src">&nbsp;<span Class="keyword">import</span> org.xml.sax.Attributes;</pre></td>
228  </tr>
229  <tr>
230  <td class="numLine">&nbsp;18</td>
231  <td class="nbHits">&nbsp;</td>
232  <td class="src"><pre class="src">&nbsp;</pre></td>
233  </tr>
234  <tr>
235  <td class="numLineCover">&nbsp;19<a name="src_19"></a></td>
236  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
237  <td class="src"><pre class="src">&nbsp;<span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">class</span> ParseResult</span></pre></td>
238  </tr>
239  <tr>
240  <td class="numLine">&nbsp;20</td>
241  <td class="nbHits">&nbsp;</td>
242  <td class="src"><pre class="src">&nbsp;{</pre></td>
243  </tr>
244  <tr>
245  <td class="numLine">&nbsp;21</td>
246  <td class="nbHits">&nbsp;</td>
247  <td class="src"><pre class="src">&nbsp;        Stack&#60;String&#62; m_current;                                                                        <span Class="comment">// Name of the element that we're currently inside</span></pre></td>
248  </tr>
249  <tr>
250  <td class="numLine">&nbsp;22</td>
251  <td class="nbHits">&nbsp;</td>
252  <td class="src"><pre class="src">&nbsp;        StringBuilder m_chars;                                                                          <span Class="comment">// character content of m_current.peek()</span></pre></td>
253  </tr>
254  <tr>
255  <td class="numLine">&nbsp;23</td>
256  <td class="nbHits">&nbsp;</td>
257  <td class="src"><pre class="src">&nbsp;        ArrayList&#60;ParseResult&#62; m_childParsers;                                          <span Class="comment">// Set of all child parsers</span></pre></td>
258  </tr>
259  <tr>
260  <td class="numLine">&nbsp;24</td>
261  <td class="nbHits">&nbsp;</td>
262  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">boolean</span> m_haveSeenMyTag;                                                                   <span Class="comment">// Have I encountered my own (root) tag yet?</span></pre></td>
263  </tr>
264  <tr>
265  <td class="numLine">&nbsp;25</td>
266  <td class="nbHits">&nbsp;</td>
267  <td class="src"><pre class="src">&nbsp;</pre></td>
268  </tr>
269  <tr>
270  <td class="numLine">&nbsp;26</td>
271  <td class="nbHits">&nbsp;</td>
272  <td class="src"><pre class="src">&nbsp;        String m_tagName;                                                                                       <span Class="comment">// Name of the (root) element tag that I'm parsing</span></pre></td>
273  </tr>
274  <tr>
275  <td class="numLine">&nbsp;27</td>
276  <td class="nbHits">&nbsp;</td>
277  <td class="src"><pre class="src">&nbsp;        HashSet&#60;String&#62; m_internal;                                                                     <span Class="comment">// Tags that we will store as members of this class instance</span></pre></td>
278  </tr>
279  <tr>
280  <td class="numLine">&nbsp;28</td>
281  <td class="nbHits">&nbsp;</td>
282  <td class="src"><pre class="src">&nbsp;        HashMap&#60;String,Class&#60;? <span Class="keyword">extends</span> ParseResult&#62;&#62; m_external;   <span Class="comment">// Tags that we will store as child ParseResult-derived objects</span></pre></td>
283  </tr>
284  <tr>
285  <td class="numLine">&nbsp;29</td>
286  <td class="nbHits">&nbsp;</td>
287  <td class="src"><pre class="src">&nbsp;</pre></td>
288  </tr>
289  <tr>
290  <td class="numLine">&nbsp;30</td>
291  <td class="nbHits">&nbsp;</td>
292  <td class="src"><pre class="src">&nbsp;        @SuppressWarnings(<span Class="string">"unchecked"</span>)</pre></td>
293  </tr>
294  <tr>
295  <td class="numLine">&nbsp;31</td>
296  <td class="nbHits">&nbsp;</td>
297  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> ParseResult(String tagName, String[] internalMemberTags, Object[][] externalParserTags)</pre></td>
298  </tr>
299  <tr>
300  <td class="numLineCover">&nbsp;32<a name="src_32"></a></td>
301  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
302  <td class="src"><pre class="src">&nbsp;        {</span></pre></td>
303  </tr>
304  <tr>
305  <td class="numLineCover">&nbsp;33</td>
306  <td class="nbHits">&nbsp;</td>
307  <td class="src"><pre class="src">&nbsp;                m_current = <span Class="keyword">new</span> Stack&#60;String&#62;();</pre></td>
308  </tr>
309  <tr>
310  <td class="numLineCover">&nbsp;34</td>
311  <td class="nbHits">&nbsp;</td>
312  <td class="src"><pre class="src">&nbsp;                m_chars = <span Class="keyword">new</span> StringBuilder();</pre></td>
313  </tr>
314  <tr>
315  <td class="numLineCover">&nbsp;35</td>
316  <td class="nbHits">&nbsp;</td>
317  <td class="src"><pre class="src">&nbsp;                m_childParsers = <span Class="keyword">new</span> ArrayList&#60;ParseResult&#62;();</pre></td>
318  </tr>
319  <tr>
320  <td class="numLineCover">&nbsp;36</td>
321  <td class="nbHits">&nbsp;</td>
322  <td class="src"><pre class="src">&nbsp;                m_haveSeenMyTag = <span Class="keyword">false</span>;</pre></td>
323  </tr>
324  <tr>
325  <td class="numLine">&nbsp;37</td>
326  <td class="nbHits">&nbsp;</td>
327  <td class="src"><pre class="src">&nbsp;                </pre></td>
328  </tr>
329  <tr>
330  <td class="numLineCover">&nbsp;38</td>
331  <td class="nbHits">&nbsp;</td>
332  <td class="src"><pre class="src">&nbsp;                m_tagName = tagName;</pre></td>
333  </tr>
334  <tr>
335  <td class="numLineCover">&nbsp;39</td>
336  <td class="nbHits">&nbsp;</td>
337  <td class="src"><pre class="src">&nbsp;                m_internal = <span Class="keyword">new</span> HashSet&#60;String&#62;();</pre></td>
338  </tr>
339  <tr>
340  <td class="numLineCover">&nbsp;40</td>
341  <td class="nbHits">&nbsp;</td>
342  <td class="src"><pre class="src">&nbsp;                m_external = <span Class="keyword">new</span> HashMap&#60;String, Class&#60;? <span Class="keyword">extends</span> ParseResult&#62;&#62;();</pre></td>
343  </tr>
344  <tr>
345  <td class="numLine">&nbsp;41</td>
346  <td class="nbHits">&nbsp;</td>
347  <td class="src"><pre class="src">&nbsp;</pre></td>
348  </tr>
349  <tr>
350  <td class="numLineCover">&nbsp;42</td>
351  <td class="nbHits">&nbsp;</td>
352  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">for</span> (String internalTag : internalMemberTags) {</pre></td>
353  </tr>
354  <tr>
355  <td class="numLineCover">&nbsp;43</td>
356  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
357  <td class="src"><pre class="src">&nbsp;                        m_internal.add(internalTag);</span></pre></td>
358  </tr>
359  <tr>
360  <td class="numLine">&nbsp;44</td>
361  <td class="nbHits">&nbsp;</td>
362  <td class="src"><pre class="src">&nbsp;                }</pre></td>
363  </tr>
364  <tr>
365  <td class="numLine">&nbsp;45</td>
366  <td class="nbHits">&nbsp;</td>
367  <td class="src"><pre class="src">&nbsp;</pre></td>
368  </tr>
369  <tr>
370  <td class="numLineCover">&nbsp;46</td>
371  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
372  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">for</span> (<span Class="keyword">int</span> idx = 0; idx &#60; externalParserTags.length; ++idx) {</span></pre></td>
373  </tr>
374  <tr>
375  <td class="numLineCover">&nbsp;47</td>
376  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
377  <td class="src"><pre class="src">&nbsp;                        String externalTag = (String)externalParserTags[idx][0];</span></pre></td>
378  </tr>
379  <tr>
380  <td class="numLineCover">&nbsp;48</td>
381  <td class="nbHits">&nbsp;</td>
382  <td class="src"><pre class="src">&nbsp;                        Class&#60;? <span Class="keyword">extends</span> ParseResult&#62;  parserClass = (Class&#60;? <span Class="keyword">extends</span> ParseResult&#62;)externalParserTags[idx][1];</pre></td>
383  </tr>
384  <tr>
385  <td class="numLineCover">&nbsp;49</td>
386  <td class="nbHits">&nbsp;</td>
387  <td class="src"><pre class="src">&nbsp;                        m_external.put(externalTag, parserClass);</pre></td>
388  </tr>
389  <tr>
390  <td class="numLine">&nbsp;50</td>
391  <td class="nbHits">&nbsp;</td>
392  <td class="src"><pre class="src">&nbsp;                }</pre></td>
393  </tr>
394  <tr>
395  <td class="numLineCover">&nbsp;51</td>
396  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
397  <td class="src"><pre class="src">&nbsp;        }</span></pre></td>
398  </tr>
399  <tr>
400  <td class="numLine">&nbsp;52</td>
401  <td class="nbHits">&nbsp;</td>
402  <td class="src"><pre class="src">&nbsp;</pre></td>
403  </tr>
404  <tr>
405  <td class="numLine">&nbsp;53</td>
406  <td class="nbHits">&nbsp;</td>
407  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">void</span> endContents(String uri, String localName, String qName, String chars) <span Class="keyword">throws</span> XmlParseException;</pre></td>
408  </tr>
409  <tr>
410  <td class="numLine">&nbsp;54</td>
411  <td class="nbHits">&nbsp;</td>
412  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">void</span> endExternal(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException;</pre></td>
413  </tr>
414  <tr>
415  <td class="numLine">&nbsp;55</td>
416  <td class="nbHits">&nbsp;</td>
417  <td class="src"><pre class="src">&nbsp;        </pre></td>
418  </tr>
419  <tr>
420  <td class="numLineCover">&nbsp;56<a name="src_56"></a></td>
421  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
422  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> String getTagName() { <span Class="keyword">return</span> m_tagName; }</span></pre></td>
423  </tr>
424  <tr>
425  <td class="numLineUnCover">&nbsp;57<a name="src_57"></a></td>
426  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;0/1&nbsp;</td>
427  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> <span Class="keyword">boolean</span> haveSeenMyTag() { <span Class="keyword">return</span> m_haveSeenMyTag; }</span></pre></td>
428  </tr>
429  <tr>
430  <td class="numLine">&nbsp;58</td>
431  <td class="nbHits">&nbsp;</td>
432  <td class="src"><pre class="src">&nbsp;</pre></td>
433  </tr>
434  <tr>
435  <td class="numLine">&nbsp;59</td>
436  <td class="nbHits">&nbsp;</td>
437  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> <span Class="keyword">void</span> characters(<span Class="keyword">char</span>[] ch, <span Class="keyword">int</span> start, <span Class="keyword">int</span> length) <span Class="keyword">throws</span> XmlParseException</pre></td>
438  </tr>
439  <tr>
440  <td class="numLine">&nbsp;60</td>
441  <td class="nbHits">&nbsp;</td>
442  <td class="src"><pre class="src">&nbsp;        {</pre></td>
443  </tr>
444  <tr>
445  <td class="numLineCover">&nbsp;61<a name="src_61"></a></td>
446  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
447  <td class="src"><pre class="src">&nbsp;                m_chars.append(ch, start, length);</span></pre></td>
448  </tr>
449  <tr>
450  <td class="numLineCover">&nbsp;62</td>
451  <td class="nbHits">&nbsp;</td>
452  <td class="src"><pre class="src">&nbsp;        }</pre></td>
453  </tr>
454  <tr>
455  <td class="numLine">&nbsp;63</td>
456  <td class="nbHits">&nbsp;</td>
457  <td class="src"><pre class="src">&nbsp;        </pre></td>
458  </tr>
459  <tr>
460  <td class="numLine">&nbsp;64</td>
461  <td class="nbHits">&nbsp;</td>
462  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">protected</span> ParseResult[] collectParsedChildren(Class&#60;? <span Class="keyword">extends</span> ParseResult&#62; cls) {</pre></td>
463  </tr>
464  <tr>
465  <td class="numLineCover">&nbsp;65<a name="src_65"></a></td>
466  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
467  <td class="src"><pre class="src">&nbsp;                ArrayList&#60;ParseResult&#62; collection = <span Class="keyword">new</span> ArrayList&#60;ParseResult&#62;();</span></pre></td>
468  </tr>
469  <tr>
470  <td class="numLineCover">&nbsp;66</td>
471  <td class="nbHits">&nbsp;</td>
472  <td class="src"><pre class="src">&nbsp;                Iterator&#60;ParseResult&#62; iter = m_childParsers.iterator();</pre></td>
473  </tr>
474  <tr>
475  <td class="numLineCover">&nbsp;67</td>
476  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
477  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">while</span> (iter.hasNext()) {</span></pre></td>
478  </tr>
479  <tr>
480  <td class="numLineCover">&nbsp;68</td>
481  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
482  <td class="src"><pre class="src">&nbsp;                        ParseResult pr = iter.next();</span></pre></td>
483  </tr>
484  <tr>
485  <td class="numLineCover">&nbsp;69</td>
486  <td class="nbHits">&nbsp;</td>
487  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">if</span> (pr.getClass().isAssignableFrom(cls)) {</pre></td>
488  </tr>
489  <tr>
490  <td class="numLineCover">&nbsp;70</td>
491  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
492  <td class="src"><pre class="src">&nbsp;                                collection.add(pr);</span></pre></td>
493  </tr>
494  <tr>
495  <td class="numLineCover">&nbsp;71</td>
496  <td class="nbHits">&nbsp;</td>
497  <td class="src"><pre class="src">&nbsp;                                iter.remove();</pre></td>
498  </tr>
499  <tr>
500  <td class="numLine">&nbsp;72</td>
501  <td class="nbHits">&nbsp;</td>
502  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
503  </tr>
504  <tr>
505  <td class="numLineCover">&nbsp;73</td>
506  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;0/1&nbsp;</td>
507  <td class="src"><pre class="src">&nbsp;                }</span></pre></td>
508  </tr>
509  <tr>
510  <td class="numLine">&nbsp;74</td>
511  <td class="nbHits">&nbsp;</td>
512  <td class="src"><pre class="src">&nbsp;                </pre></td>
513  </tr>
514  <tr>
515  <td class="numLineCover">&nbsp;75</td>
516  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
517  <td class="src"><pre class="src">&nbsp;                ParseResult[] result = <span Class="keyword">new</span> ParseResult[collection.size()];</span></pre></td>
518  </tr>
519  <tr>
520  <td class="numLineCover">&nbsp;76</td>
521  <td class="nbHits">&nbsp;</td>
522  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">return</span> collection.toArray(result);</pre></td>
523  </tr>
524  <tr>
525  <td class="numLine">&nbsp;77</td>
526  <td class="nbHits">&nbsp;</td>
527  <td class="src"><pre class="src">&nbsp;        }</pre></td>
528  </tr>
529  <tr>
530  <td class="numLine">&nbsp;78</td>
531  <td class="nbHits">&nbsp;</td>
532  <td class="src"><pre class="src">&nbsp;</pre></td>
533  </tr>
534  <tr>
535  <td class="numLine">&nbsp;79</td>
536  <td class="nbHits">&nbsp;</td>
537  <td class="src"><pre class="src">&nbsp;        <span Class="comment">// returns true if this ParseResult's context has ended with this endElement() call</span></pre></td>
538  </tr>
539  <tr>
540  <td class="numLine">&nbsp;80</td>
541  <td class="nbHits">&nbsp;</td>
542  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> <span Class="keyword">boolean</span> endElement(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException</pre></td>
543  </tr>
544  <tr>
545  <td class="numLine">&nbsp;81</td>
546  <td class="nbHits">&nbsp;</td>
547  <td class="src"><pre class="src">&nbsp;        {</pre></td>
548  </tr>
549  <tr>
550  <td class="numLineCover">&nbsp;82<a name="src_82"></a></td>
551  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
552  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
553  </tr>
554  <tr>
555  <td class="numLine">&nbsp;83</td>
556  <td class="nbHits">&nbsp;</td>
557  <td class="src"><pre class="src">&nbsp;                </pre></td>
558  </tr>
559  <tr>
560  <td class="numLineCover">&nbsp;84</td>
561  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/2&nbsp;</td>
562  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">boolean</span> isInternal = m_internal.contains(localName);</span></pre></td>
563  </tr>
564  <tr>
565  <td class="numLine">&nbsp;85</td>
566  <td class="nbHits">&nbsp;</td>
567  <td class="src"><pre class="src">&nbsp;</pre></td>
568  </tr>
569  <tr>
570  <td class="numLineCover">&nbsp;86</td>
571  <td class="nbHits">&nbsp;</td>
572  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> (! m_haveSeenMyTag) {</pre></td>
573  </tr>
574  <tr>
575  <td class="numLine">&nbsp;87</td>
576  <td class="nbHits">&nbsp;</td>
577  <td class="src"><pre class="src">&nbsp;                        <span Class="comment">// We're in some unrecognised prologue.  Ignore it and move on.</span></pre></td>
578  </tr>
579  <tr>
580  <td class="numLineCover">&nbsp;88</td>
581  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
582  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">return</span> <span Class="keyword">false</span>;</span></pre></td>
583  </tr>
584  <tr>
585  <td class="numLine">&nbsp;89</td>
586  <td class="nbHits">&nbsp;</td>
587  <td class="src"><pre class="src">&nbsp;                }</pre></td>
588  </tr>
589  <tr>
590  <td class="numLine">&nbsp;90</td>
591  <td class="nbHits">&nbsp;</td>
592  <td class="src"><pre class="src">&nbsp;                </pre></td>
593  </tr>
594  <tr>
595  <td class="numLineCover">&nbsp;91</td>
596  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
597  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> (m_tagName.equals(localName)) {</span></pre></td>
598  </tr>
599  <tr>
600  <td class="numLineCover">&nbsp;92</td>
601  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
602  <td class="src"><pre class="src">&nbsp;                        validate();</span></pre></td>
603  </tr>
604  <tr>
605  <td class="numLineCover">&nbsp;93</td>
606  <td class="nbHits">&nbsp;</td>
607  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">return</span> <span Class="keyword">true</span>;</pre></td>
608  </tr>
609  <tr>
610  <td class="numLine">&nbsp;94</td>
611  <td class="nbHits">&nbsp;</td>
612  <td class="src"><pre class="src">&nbsp;                }</pre></td>
613  </tr>
614  <tr>
615  <td class="numLine">&nbsp;95</td>
616  <td class="nbHits">&nbsp;</td>
617  <td class="src"><pre class="src">&nbsp;                </pre></td>
618  </tr>
619  <tr>
620  <td class="numLineCover">&nbsp;96</td>
621  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
622  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> (!isInternal) {</span></pre></td>
623  </tr>
624  <tr>
625  <td class="numLine">&nbsp;97</td>
626  <td class="nbHits">&nbsp;</td>
627  <td class="src"><pre class="src">&nbsp;                        <span Class="comment">// Unrecognized tag.  Ignore it.</span></pre></td>
628  </tr>
629  <tr>
630  <td class="numLineCover">&nbsp;98</td>
631  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
632  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">return</span> <span Class="keyword">false</span>;</span></pre></td>
633  </tr>
634  <tr>
635  <td class="numLine">&nbsp;99</td>
636  <td class="nbHits">&nbsp;</td>
637  <td class="src"><pre class="src">&nbsp;                }</pre></td>
638  </tr>
639  <tr>
640  <td class="numLine">&nbsp;100</td>
641  <td class="nbHits">&nbsp;</td>
642  <td class="src"><pre class="src">&nbsp;                </pre></td>
643  </tr>
644  <tr>
645  <td class="numLineCover">&nbsp;101</td>
646  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
647  <td class="src"><pre class="src">&nbsp;                String tag = m_current.pop();</span></pre></td>
648  </tr>
649  <tr>
650  <td class="numLineCover">&nbsp;102</td>
651  <td class="nbHits">&nbsp;</td>
652  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> ( ! tag.equals(localName) ) {</pre></td>
653  </tr>
654  <tr>
655  <td class="numLineUnCover">&nbsp;103</td>
656  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;0/1&nbsp;Branch:&nbsp;0/1&nbsp;</td>
657  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">throw</span> <span Class="keyword">new</span> MismatchedTagsException(tag, localName);</span></pre></td>
658  </tr>
659  <tr>
660  <td class="numLine">&nbsp;104</td>
661  <td class="nbHits">&nbsp;</td>
662  <td class="src"><pre class="src">&nbsp;                }</pre></td>
663  </tr>
664  <tr>
665  <td class="numLine">&nbsp;105</td>
666  <td class="nbHits">&nbsp;</td>
667  <td class="src"><pre class="src">&nbsp;                </pre></td>
668  </tr>
669  <tr>
670  <td class="numLineCover">&nbsp;106</td>
671  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
672  <td class="src"><pre class="src">&nbsp;                String chars = m_chars.toString();</span></pre></td>
673  </tr>
674  <tr>
675  <td class="numLineCover">&nbsp;107</td>
676  <td class="nbHits">&nbsp;</td>
677  <td class="src"><pre class="src">&nbsp;                endContents(uri, localName, qName, chars);</pre></td>
678  </tr>
679  <tr>
680  <td class="numLine">&nbsp;108</td>
681  <td class="nbHits">&nbsp;</td>
682  <td class="src"><pre class="src">&nbsp;                </pre></td>
683  </tr>
684  <tr>
685  <td class="numLineCover">&nbsp;109</td>
686  <td class="nbHits">&nbsp;</td>
687  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">return</span> <span Class="keyword">false</span>;</pre></td>
688  </tr>
689  <tr>
690  <td class="numLine">&nbsp;110</td>
691  <td class="nbHits">&nbsp;</td>
692  <td class="src"><pre class="src">&nbsp;        }</pre></td>
693  </tr>
694  <tr>
695  <td class="numLine">&nbsp;111</td>
696  <td class="nbHits">&nbsp;</td>
697  <td class="src"><pre class="src">&nbsp;        </pre></td>
698  </tr>
699  <tr>
700  <td class="numLine">&nbsp;112</td>
701  <td class="nbHits">&nbsp;</td>
702  <td class="src"><pre class="src">&nbsp;        <span Class="comment">// returns either itself, or a new ParseResult-derived object, whichever should handle parsing the inside of this element</span></pre></td>
703  </tr>
704  <tr>
705  <td class="numLine">&nbsp;113</td>
706  <td class="nbHits">&nbsp;</td>
707  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> ParseResult startElement(String uri, String localName, String qName, Attributes attributes) </pre></td>
708  </tr>
709  <tr>
710  <td class="numLine">&nbsp;114</td>
711  <td class="nbHits">&nbsp;</td>
712  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">throws</span> XmlParseException</pre></td>
713  </tr>
714  <tr>
715  <td class="numLine">&nbsp;115</td>
716  <td class="nbHits">&nbsp;</td>
717  <td class="src"><pre class="src">&nbsp;        {</pre></td>
718  </tr>
719  <tr>
720  <td class="numLineCover">&nbsp;116<a name="src_116"></a></td>
721  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
722  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
723  </tr>
724  <tr>
725  <td class="numLine">&nbsp;117</td>
726  <td class="nbHits">&nbsp;</td>
727  <td class="src"><pre class="src">&nbsp;</pre></td>
728  </tr>
729  <tr>
730  <td class="numLineCover">&nbsp;118</td>
731  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/2&nbsp;</td>
732  <td class="src"><pre class="src">&nbsp;                m_chars.setLength(0);</span></pre></td>
733  </tr>
734  <tr>
735  <td class="numLine">&nbsp;119</td>
736  <td class="nbHits">&nbsp;</td>
737  <td class="src"><pre class="src">&nbsp;                </pre></td>
738  </tr>
739  <tr>
740  <td class="numLineCover">&nbsp;120</td>
741  <td class="nbHits">&nbsp;</td>
742  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> (! m_haveSeenMyTag) {</pre></td>
743  </tr>
744  <tr>
745  <td class="numLine">&nbsp;121</td>
746  <td class="nbHits">&nbsp;</td>
747  <td class="src"><pre class="src">&nbsp;                        <span Class="comment">// Have we opened our own (root) tag yet?</span></pre></td>
748  </tr>
749  <tr>
750  <td class="numLine">&nbsp;122</td>
751  <td class="nbHits">&nbsp;</td>
752  <td class="src"><pre class="src">&nbsp;                        </pre></td>
753  </tr>
754  <tr>
755  <td class="numLineCover">&nbsp;123</td>
756  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
757  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">if</span> (m_tagName.equals(localName)) {</span></pre></td>
758  </tr>
759  <tr>
760  <td class="numLineCover">&nbsp;124</td>
761  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
762  <td class="src"><pre class="src">&nbsp;                                m_haveSeenMyTag = <span Class="keyword">true</span>;</span></pre></td>
763  </tr>
764  <tr>
765  <td class="numLineCover">&nbsp;125</td>
766  <td class="nbHits">&nbsp;</td>
767  <td class="src"><pre class="src">&nbsp;                                <span Class="keyword">return</span> <span Class="keyword">this</span>;</pre></td>
768  </tr>
769  <tr>
770  <td class="numLine">&nbsp;126</td>
771  <td class="nbHits">&nbsp;</td>
772  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
773  </tr>
774  <tr>
775  <td class="numLine">&nbsp;127</td>
776  <td class="nbHits">&nbsp;</td>
777  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">else</span> {</pre></td>
778  </tr>
779  <tr>
780  <td class="numLine">&nbsp;128</td>
781  <td class="nbHits">&nbsp;</td>
782  <td class="src"><pre class="src">&nbsp;                                <span Class="comment">// One of two things has happened here.</span></pre></td>
783  </tr>
784  <tr>
785  <td class="numLine">&nbsp;129</td>
786  <td class="nbHits">&nbsp;</td>
787  <td class="src"><pre class="src">&nbsp;                                <span Class="comment">// Either (a) we've got some sort of wrapper here, and have not yet reach our own tag, </span></pre></td>
788  </tr>
789  <tr>
790  <td class="numLine">&nbsp;130</td>
791  <td class="nbHits">&nbsp;</td>
792  <td class="src"><pre class="src">&nbsp;                                <span Class="comment">//     or (b) we're parsing XML that doesn't match expectations.</span></pre></td>
793  </tr>
794  <tr>
795  <td class="numLine">&nbsp;131</td>
796  <td class="nbHits">&nbsp;</td>
797  <td class="src"><pre class="src">&nbsp;                                <span Class="comment">// In either case, we're going to ignore this tag, and scan forward looking for our own root.</span></pre></td>
798  </tr>
799  <tr>
800  <td class="numLineCover">&nbsp;132</td>
801  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
802  <td class="src"><pre class="src">&nbsp;                                <span Class="keyword">return</span> <span Class="keyword">this</span>;</span></pre></td>
803  </tr>
804  <tr>
805  <td class="numLine">&nbsp;133</td>
806  <td class="nbHits">&nbsp;</td>
807  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
808  </tr>
809  <tr>
810  <td class="numLine">&nbsp;134</td>
811  <td class="nbHits">&nbsp;</td>
812  <td class="src"><pre class="src">&nbsp;                }</pre></td>
813  </tr>
814  <tr>
815  <td class="numLine">&nbsp;135</td>
816  <td class="nbHits">&nbsp;</td>
817  <td class="src"><pre class="src">&nbsp;</pre></td>
818  </tr>
819  <tr>
820  <td class="numLineCover">&nbsp;136</td>
821  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
822  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> (m_internal.contains(localName)) {</span></pre></td>
823  </tr>
824  <tr>
825  <td class="numLineCover">&nbsp;137</td>
826  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
827  <td class="src"><pre class="src">&nbsp;                        m_current.push(localName);</span></pre></td>
828  </tr>
829  <tr>
830  <td class="numLineCover">&nbsp;138</td>
831  <td class="nbHits">&nbsp;</td>
832  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">return</span> <span Class="keyword">this</span>;</pre></td>
833  </tr>
834  <tr>
835  <td class="numLine">&nbsp;139</td>
836  <td class="nbHits">&nbsp;</td>
837  <td class="src"><pre class="src">&nbsp;                }</pre></td>
838  </tr>
839  <tr>
840  <td class="numLine">&nbsp;140</td>
841  <td class="nbHits">&nbsp;</td>
842  <td class="src"><pre class="src">&nbsp;</pre></td>
843  </tr>
844  <tr>
845  <td class="numLineCover">&nbsp;141</td>
846  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
847  <td class="src"><pre class="src">&nbsp;                Class&#60;? <span Class="keyword">extends</span> ParseResult&#62; parserClass = m_external.get(localName);</span></pre></td>
848  </tr>
849  <tr>
850  <td class="numLineCover">&nbsp;142</td>
851  <td class="nbHits">&nbsp;</td>
852  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">if</span> (<span Class="keyword">null</span> != parserClass) {</pre></td>
853  </tr>
854  <tr>
855  <td class="numLine">&nbsp;143</td>
856  <td class="nbHits">&nbsp;</td>
857  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">try</span> {</pre></td>
858  </tr>
859  <tr>
860  <td class="numLineCover">&nbsp;144</td>
861  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
862  <td class="src"><pre class="src">&nbsp;                                ParseResult childParser = (ParseResult) parserClass.newInstance();</span></pre></td>
863  </tr>
864  <tr>
865  <td class="numLineCover">&nbsp;145</td>
866  <td class="nbHits">&nbsp;</td>
867  <td class="src"><pre class="src">&nbsp;                                m_childParsers.add(childParser);</pre></td>
868  </tr>
869  <tr>
870  <td class="numLineCover">&nbsp;146</td>
871  <td class="nbHits">&nbsp;</td>
872  <td class="src"><pre class="src">&nbsp;                                <span Class="keyword">return</span> childParser.startElement(uri, localName, qName, attributes);</pre></td>
873  </tr>
874  <tr>
875  <td class="numLine">&nbsp;147</td>
876  <td class="nbHits">&nbsp;</td>
877  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
878  </tr>
879  <tr>
880  <td class="numLineUnCover">&nbsp;148</td>
881  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;0/1&nbsp;</td>
882  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">catch</span> (IllegalAccessException iae) {</span></pre></td>
883  </tr>
884  <tr>
885  <td class="numLineUnCover">&nbsp;149</td>
886  <td class="nbHits">&nbsp;</td>
887  <td class="src"><pre class="src">&nbsp;                                <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(iae);</pre></td>
888  </tr>
889  <tr>
890  <td class="numLine">&nbsp;150</td>
891  <td class="nbHits">&nbsp;</td>
892  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
893  </tr>
894  <tr>
895  <td class="numLineUnCover">&nbsp;151</td>
896  <td class="nbHitsUncovered">&nbsp;Block:&nbsp;0/1&nbsp;</td>
897  <td class="src"><pre class="src">&nbsp;                        <span Class="keyword">catch</span> (InstantiationException ie) {</span></pre></td>
898  </tr>
899  <tr>
900  <td class="numLineUnCover">&nbsp;152</td>
901  <td class="nbHits">&nbsp;</td>
902  <td class="src"><pre class="src">&nbsp;                                <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(ie);</pre></td>
903  </tr>
904  <tr>
905  <td class="numLine">&nbsp;153</td>
906  <td class="nbHits">&nbsp;</td>
907  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
908  </tr>
909  <tr>
910  <td class="numLine">&nbsp;154</td>
911  <td class="nbHits">&nbsp;</td>
912  <td class="src"><pre class="src">&nbsp;                }</pre></td>
913  </tr>
914  <tr>
915  <td class="numLine">&nbsp;155</td>
916  <td class="nbHits">&nbsp;</td>
917  <td class="src"><pre class="src">&nbsp;                </pre></td>
918  </tr>
919  <tr>
920  <td class="numLine">&nbsp;156</td>
921  <td class="nbHits">&nbsp;</td>
922  <td class="src"><pre class="src">&nbsp;                <span Class="comment">// Not a recognized tag.  Ignore it, rather than complaining. </span></pre></td>
923  </tr>
924  <tr>
925  <td class="numLineCover">&nbsp;157</td>
926  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;Branch:&nbsp;1/1&nbsp;</td>
927  <td class="src"><pre class="src">&nbsp;                <span Class="keyword">return</span> <span Class="keyword">this</span>;</span></pre></td>
928  </tr>
929  <tr>
930  <td class="numLine">&nbsp;158</td>
931  <td class="nbHits">&nbsp;</td>
932  <td class="src"><pre class="src">&nbsp;        }</pre></td>
933  </tr>
934  <tr>
935  <td class="numLine">&nbsp;159</td>
936  <td class="nbHits">&nbsp;</td>
937  <td class="src"><pre class="src">&nbsp;        </pre></td>
938  </tr>
939  <tr>
940  <td class="numLine">&nbsp;160</td>
941  <td class="nbHits">&nbsp;</td>
942  <td class="src"><pre class="src">&nbsp;        <span Class="keyword">public</span> <span Class="keyword">void</span> validate() <span Class="keyword">throws</span> XmlParseException</pre></td>
943  </tr>
944  <tr>
945  <td class="numLine">&nbsp;161</td>
946  <td class="nbHits">&nbsp;</td>
947  <td class="src"><pre class="src">&nbsp;        {</pre></td>
948  </tr>
949  <tr>
950  <td class="numLine">&nbsp;162</td>
951  <td class="nbHits">&nbsp;</td>
952  <td class="src"><pre class="src">&nbsp;                <span Class="comment">// Default implementation is a no-op.</span></pre></td>
953  </tr>
954  <tr>
955  <td class="numLine">&nbsp;163</td>
956  <td class="nbHits">&nbsp;</td>
957  <td class="src"><pre class="src">&nbsp;                <span Class="comment">// Override if you want to validate on endElement()</span></pre></td>
958  </tr>
959  <tr>
960  <td class="numLineCover">&nbsp;164<a name="src_164"></a></td>
961  <td class="nbHitsCovered">&nbsp;Block:&nbsp;1/1&nbsp;</td>
962  <td class="src"><pre class="src">&nbsp;        }</span></pre></td>
963  </tr>
964  <tr>
965  <td class="numLine">&nbsp;165</td>
966  <td class="nbHits">&nbsp;</td>
967  <td class="src"><pre class="src">&nbsp;}</pre></td>
968  </tr>
969  <tr>
970  <td class="numLine">&nbsp;166</td>
971  <td class="nbHits">&nbsp;</td>
972  <td class="src"><pre class="src">&nbsp;</pre></td>
973  </tr>
974  </table>
975 <p>
976 <p><table cellpadding="0" cellspacing="0" class="report">  <tr class="report">    <td class="reportText"><span class="text">    Report generated 11/12/14 11:31 PM    </span></td>  </tr></table>
977 </body>
978 </html>