documentation version 1.4.2

This commit is contained in:
Jeremy Long
2016-07-31 08:10:07 -04:00
parent 6193968089
commit 44917ad0d3
1319 changed files with 93942 additions and 60498 deletions

View File

@@ -113,7 +113,7 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @author Jeremy Long</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;48</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;49</td> <td class="nbHitsCovered">&nbsp;20</td> <td class="src"><pre class="src">&nbsp;<span class="keyword">public</span> <span class="keyword">class</span> DependencyBundlingAnalyzer <span class="keyword">extends</span> AbstractAnalyzer <span class="keyword">implements</span> Analyzer {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;49</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp;<span class="keyword">public</span> <span class="keyword">class</span> DependencyBundlingAnalyzer <span class="keyword">extends</span> AbstractAnalyzer <span class="keyword">implements</span> Analyzer {</pre></td></tr>
<tr> <td class="numLine">&nbsp;50</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;51</td> <td class="nbHits">&nbsp;</td>
@@ -122,7 +122,7 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The Logger.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;53</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;54</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger LOGGER = LoggerFactory.getLogger(DependencyBundlingAnalyzer.<span class="keyword">class</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;54</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger LOGGER = LoggerFactory.getLogger(DependencyBundlingAnalyzer.<span class="keyword">class</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;55</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;56</td> <td class="nbHits">&nbsp;</td>
@@ -133,14 +133,14 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> * A pattern for obtaining the first part of a filename.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;59</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;60</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern STARTING_TEXT_PATTERN = Pattern.compile(<span class="string">"^[a-zA-Z0-9]*"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;60</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern STARTING_TEXT_PATTERN = Pattern.compile(<span class="string">"^[a-zA-Z0-9]*"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;61</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;62</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * a flag indicating if this analyzer has run. This analyzer only runs once.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;63</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;64</td> <td class="nbHitsCovered">&nbsp;20</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> analyzed = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;64</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> analyzed = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;65</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//&lt;/editor-fold&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;66</td> <td class="nbHits">&nbsp;</td>
@@ -159,7 +159,7 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The phase that this analyzer is intended to run in.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;73</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;74</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> AnalysisPhase ANALYSIS_PHASE = AnalysisPhase.PRE_FINDING_ANALYSIS;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;74</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> AnalysisPhase ANALYSIS_PHASE = AnalysisPhase.PRE_FINDING_ANALYSIS;</pre></td></tr>
<tr> <td class="numLine">&nbsp;75</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;76</td> <td class="nbHits">&nbsp;</td>
@@ -176,7 +176,7 @@
<td class="src"><pre class="src">&nbsp; @Override</pre></td></tr>
<tr> <td class="numLine">&nbsp;82</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> String getName() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;83</td> <td class="nbHitsCovered">&nbsp;34</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> ANALYZER_NAME;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;83</td> <td class="nbHitsCovered">&nbsp;17</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> ANALYZER_NAME;</pre></td></tr>
<tr> <td class="numLine">&nbsp;84</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;85</td> <td class="nbHits">&nbsp;</td>
@@ -195,7 +195,7 @@
<td class="src"><pre class="src">&nbsp; @Override</pre></td></tr>
<tr> <td class="numLine">&nbsp;92</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> AnalysisPhase getAnalysisPhase() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;93</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> ANALYSIS_PHASE;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;93</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> ANALYSIS_PHASE;</pre></td></tr>
<tr> <td class="numLine">&nbsp;94</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;95</td> <td class="nbHits">&nbsp;</td>
@@ -226,19 +226,19 @@
<td class="src"><pre class="src">&nbsp; @Override</pre></td></tr>
<tr> <td class="numLine">&nbsp;108</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> analyze(Dependency ignore, Engine engine) <span class="keyword">throws</span> AnalysisException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;109</td> <td class="nbHitsCovered"><a title="Line 109: Conditional coverage 100% (2/2).">&nbsp;8</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 109: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!analyzed) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;110</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; analyzed = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;111</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Set&lt;Dependency&gt; dependenciesToRemove = <span class="keyword">new</span> HashSet&lt;Dependency&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;112</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> ListIterator&lt;Dependency&gt; mainIterator = engine.getDependencies().listIterator();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;109</td> <td class="nbHitsCovered"><a title="Line 109: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 109: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!analyzed) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;110</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; analyzed = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;111</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Set&lt;Dependency&gt; dependenciesToRemove = <span class="keyword">new</span> HashSet&lt;Dependency&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;112</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> ListIterator&lt;Dependency&gt; mainIterator = engine.getDependencies().listIterator();</pre></td></tr>
<tr> <td class="numLine">&nbsp;113</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//for (Dependency nextDependency : engine.getDependencies()) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;114</td> <td class="nbHitsCovered"><a title="Line 114: Conditional coverage 100% (2/2).">&nbsp;12</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 114: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (mainIterator.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;115</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Dependency dependency = mainIterator.next();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;116</td> <td class="nbHitsUncovered"><a title="Line 116: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;8</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 116: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (mainIterator.hasNext() &amp;&amp; !dependenciesToRemove.contains(dependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;117</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> ListIterator&lt;Dependency&gt; subIterator = engine.getDependencies().listIterator(mainIterator.nextIndex());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;118</td> <td class="nbHitsCovered"><a title="Line 118: Conditional coverage 100% (2/2).">&nbsp;8</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 118: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (subIterator.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;119</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Dependency nextDependency = subIterator.next();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;120</td> <td class="nbHitsUncovered"><a title="Line 120: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 120: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">if</span> (hashesMatch(dependency, nextDependency) &amp;&amp; !containedInWar(dependency.getFilePath())</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;114</td> <td class="nbHitsCovered"><a title="Line 114: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 114: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (mainIterator.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;115</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Dependency dependency = mainIterator.next();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;116</td> <td class="nbHitsUncovered"><a title="Line 116: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 116: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (mainIterator.hasNext() &amp;&amp; !dependenciesToRemove.contains(dependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;117</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> ListIterator&lt;Dependency&gt; subIterator = engine.getDependencies().listIterator(mainIterator.nextIndex());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;118</td> <td class="nbHitsCovered"><a title="Line 118: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 118: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (subIterator.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;119</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Dependency nextDependency = subIterator.next();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;120</td> <td class="nbHitsUncovered"><a title="Line 120: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 120: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">if</span> (hashesMatch(dependency, nextDependency) &amp;&amp; !containedInWar(dependency.getFilePath())</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;121</td> <td class="nbHitsUncovered"><a title="Line 121: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 121: Conditional coverage 0% (0/2)."> &amp;&amp; !containedInWar(nextDependency.getFilePath())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;122</td> <td class="nbHitsUncovered"><a title="Line 122: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 122: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (firstPathIsShortest(dependency.getFilePath(), nextDependency.getFilePath())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;123</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mergeDependencies(dependency, nextDependency, dependenciesToRemove);</span></pre></td></tr>
@@ -248,7 +248,7 @@
<tr> <td class="numLineCover">&nbsp;126</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">break</span>; <span class="comment">//since we merged into the next dependency - skip forward to the next in mainIterator</span></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;127</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;128</td> <td class="nbHitsUncovered"><a title="Line 128: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 128: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isShadedJar(dependency, nextDependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;128</td> <td class="nbHitsUncovered"><a title="Line 128: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 128: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isShadedJar(dependency, nextDependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;129</td> <td class="nbHitsUncovered"><a title="Line 129: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 129: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (dependency.getFileName().toLowerCase().endsWith(<span class="string">"pom.xml"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;130</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mergeDependencies(nextDependency, dependency, dependenciesToRemove);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;131</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; nextDependency.getRelatedDependencies().remove(dependency);</span></pre></td></tr>
@@ -259,7 +259,7 @@
<tr> <td class="numLineCover">&nbsp;135</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; dependency.getRelatedDependencies().remove(nextDependency);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;136</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;137</td> <td class="nbHitsUncovered"><a title="Line 137: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 137: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (cpeIdentifiersMatch(dependency, nextDependency)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;137</td> <td class="nbHitsUncovered"><a title="Line 137: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 137: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (cpeIdentifiersMatch(dependency, nextDependency)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;138</td> <td class="nbHitsUncovered"><a title="Line 138: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 138: Conditional coverage 0% (0/2)."> &amp;&amp; hasSameBasePath(dependency, nextDependency)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;139</td> <td class="nbHitsUncovered"><a title="Line 139: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 139: Conditional coverage 0% (0/2)."> &amp;&amp; fileNameMatch(dependency, nextDependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;140</td> <td class="nbHitsUncovered"><a title="Line 140: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 140: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (isCore(dependency, nextDependency)) {</a></span></pre></td></tr>
@@ -270,7 +270,7 @@
<tr> <td class="numLineCover">&nbsp;144</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">break</span>; <span class="comment">//since we merged into the next dependency - skip forward to the next in mainIterator</span></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;145</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;146</td> <td class="nbHitsUncovered"><a title="Line 146: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 146: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isSameRubyGem(dependency, nextDependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;146</td> <td class="nbHitsUncovered"><a title="Line 146: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 146: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isSameRubyGem(dependency, nextDependency)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;147</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> Dependency main = getMainGemspecDependency(dependency, nextDependency);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;148</td> <td class="nbHitsUncovered"><a title="Line 148: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 148: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (main == dependency) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;149</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mergeDependencies(dependency, nextDependency, dependenciesToRemove);</span></pre></td></tr>
@@ -282,18 +282,18 @@
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;154</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;155</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;155</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;156</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;157</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;157</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;158</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//removing dependencies here as ensuring correctness and avoiding ConcurrentUpdateExceptions</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;159</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// was difficult because of the inner iterator.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;160</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; engine.getDependencies().removeAll(dependenciesToRemove);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;160</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; engine.getDependencies().removeAll(dependenciesToRemove);</pre></td></tr>
<tr> <td class="numLine">&nbsp;161</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;162</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;162</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;163</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;164</td> <td class="nbHits">&nbsp;</td>
@@ -447,27 +447,27 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;256</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> cpeIdentifiersMatch(Dependency dependency1, Dependency dependency2) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;257</td> <td class="nbHitsUncovered"><a title="Line 257: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 257: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%]."> <span class="keyword">if</span> (dependency1 == <span class="keyword">null</span> || dependency1.getIdentifiers() == <span class="keyword">null</span></a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;258</td> <td class="nbHitsUncovered"><a title="Line 258: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 258: Conditional coverage 50% (1/2)."> || dependency2 == <span class="keyword">null</span> || dependency2.getIdentifiers() == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;257</td> <td class="nbHitsUncovered"><a title="Line 257: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 257: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%]."> <span class="keyword">if</span> (dependency1 == <span class="keyword">null</span> || dependency1.getIdentifiers() == <span class="keyword">null</span></a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;258</td> <td class="nbHitsUncovered"><a title="Line 258: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 258: Conditional coverage 50% (1/2)."> || dependency2 == <span class="keyword">null</span> || dependency2.getIdentifiers() == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;259</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;260</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;261</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> matches = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;262</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> cpeCount1 = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;263</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> cpeCount2 = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;264</td> <td class="nbHitsUncovered"><a title="Line 264: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 264: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (Identifier i : dependency1.getIdentifiers()) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;261</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> matches = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;262</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> cpeCount1 = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;263</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> cpeCount2 = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;264</td> <td class="nbHitsUncovered"><a title="Line 264: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 264: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (Identifier i : dependency1.getIdentifiers()) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;265</td> <td class="nbHitsUncovered"><a title="Line 265: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 265: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="string">"cpe"</span>.equals(i.getType())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;266</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cpeCount1 += 1;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;267</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;268</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;269</td> <td class="nbHitsCovered"><a title="Line 269: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 269: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Identifier i : dependency2.getIdentifiers()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;270</td> <td class="nbHitsUncovered"><a title="Line 270: Conditional coverage 50% (1/2).">&nbsp;6</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 270: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="string">"cpe"</span>.equals(i.getType())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;271</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; cpeCount2 += 1;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;269</td> <td class="nbHitsCovered"><a title="Line 269: Conditional coverage 100% (2/2).">&nbsp;2</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 269: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Identifier i : dependency2.getIdentifiers()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;270</td> <td class="nbHitsUncovered"><a title="Line 270: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 270: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="string">"cpe"</span>.equals(i.getType())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;271</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; cpeCount2 += 1;</pre></td></tr>
<tr> <td class="numLine">&nbsp;272</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;273</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;274</td> <td class="nbHitsUncovered"><a title="Line 274: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 274: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">if</span> (cpeCount1 &gt; 0 &amp;&amp; cpeCount1 == cpeCount2) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;273</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;274</td> <td class="nbHitsUncovered"><a title="Line 274: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 274: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">if</span> (cpeCount1 &gt; 0 &amp;&amp; cpeCount1 == cpeCount2) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;275</td> <td class="nbHitsUncovered"><a title="Line 275: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 275: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Identifier i : dependency1.getIdentifiers()) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;276</td> <td class="nbHitsUncovered"><a title="Line 276: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 276: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="string">"cpe"</span>.equals(i.getType())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;277</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; matches |= dependency2.getIdentifiers().contains(i);</span></pre></td></tr>
@@ -480,8 +480,8 @@
<tr> <td class="numLineCover">&nbsp;282</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;283</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;284</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"IdentifiersMatch={} ({}, {})"</span>, matches, dependency1.getFileName(), dependency2.getFileName());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;285</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> matches;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;284</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"IdentifiersMatch={} ({}, {})"</span>, matches, dependency1.getFileName(), dependency2.getFileName());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;285</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> matches;</pre></td></tr>
<tr> <td class="numLine">&nbsp;286</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;287</td> <td class="nbHits">&nbsp;</td>
@@ -562,12 +562,12 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;335</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> isSameRubyGem(Dependency dependency1, Dependency dependency2) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;336</td> <td class="nbHitsUncovered"><a title="Line 336: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 336: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (dependency1 == <span class="keyword">null</span> || dependency2 == <span class="keyword">null</span></a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;337</td> <td class="nbHitsUncovered"><a title="Line 337: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 337: Conditional coverage 50% (1/2)."> || !dependency1.getFileName().endsWith(<span class="string">".gemspec"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;336</td> <td class="nbHitsUncovered"><a title="Line 336: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 336: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (dependency1 == <span class="keyword">null</span> || dependency2 == <span class="keyword">null</span></a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;337</td> <td class="nbHitsUncovered"><a title="Line 337: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 337: Conditional coverage 50% (1/2)."> || !dependency1.getFileName().endsWith(<span class="string">".gemspec"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;338</td> <td class="nbHitsUncovered"><a title="Line 338: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 338: Conditional coverage 0% (0/2)."> || !dependency2.getFileName().endsWith(<span class="string">".gemspec"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;339</td> <td class="nbHitsUncovered"><a title="Line 339: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 339: Conditional coverage 0% (0/2)."> || dependency1.getPackagePath() == <span class="keyword">null</span></a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;340</td> <td class="nbHitsUncovered"><a title="Line 340: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 340: Conditional coverage 0% (0/2)."> || dependency2.getPackagePath() == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;341</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;341</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;342</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;343</td> <td class="nbHitsUncovered"><a title="Line 343: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 343: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (dependency1.getPackagePath().equalsIgnoreCase(dependency2.getPackagePath())) {</a></span></pre></td></tr>
@@ -652,20 +652,20 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;388</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> isCore(Dependency left, Dependency right) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;389</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String leftName = left.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;390</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String rightName = right.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;389</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String leftName = left.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;390</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String rightName = right.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLine">&nbsp;391</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;392</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">boolean</span> returnVal;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;393</td> <td class="nbHitsUncovered"><a title="Line 393: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 393: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (!rightName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>) &amp;&amp; leftName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;394</td> <td class="nbHitsUncovered"><a title="Line 394: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 394: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> || rightName.contains(<span class="string">"core"</span>) &amp;&amp; !leftName.contains(<span class="string">"core"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;395</td> <td class="nbHitsUncovered"><a title="Line 395: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 395: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> || rightName.contains(<span class="string">"kernel"</span>) &amp;&amp; !leftName.contains(<span class="string">"kernel"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;393</td> <td class="nbHitsUncovered"><a title="Line 393: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 393: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (!rightName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>) &amp;&amp; leftName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;394</td> <td class="nbHitsUncovered"><a title="Line 394: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 394: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> || rightName.contains(<span class="string">"core"</span>) &amp;&amp; !leftName.contains(<span class="string">"core"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;395</td> <td class="nbHitsUncovered"><a title="Line 395: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 395: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> || rightName.contains(<span class="string">"kernel"</span>) &amp;&amp; !leftName.contains(<span class="string">"kernel"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;396</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; returnVal = <span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;397</td> <td class="nbHitsUncovered"><a title="Line 397: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 397: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (rightName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>) &amp;&amp; !leftName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;398</td> <td class="nbHitsUncovered"><a title="Line 398: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 398: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> || !rightName.contains(<span class="string">"core"</span>) &amp;&amp; leftName.contains(<span class="string">"core"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;399</td> <td class="nbHitsUncovered"><a title="Line 399: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 399: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> || !rightName.contains(<span class="string">"kernel"</span>) &amp;&amp; leftName.contains(<span class="string">"kernel"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;400</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; returnVal = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;397</td> <td class="nbHitsUncovered"><a title="Line 397: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 397: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (rightName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>) &amp;&amp; !leftName.matches(<span class="string">".*\\.(tar|tgz|gz|zip|ear|war).+"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;398</td> <td class="nbHitsUncovered"><a title="Line 398: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 398: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> || !rightName.contains(<span class="string">"core"</span>) &amp;&amp; leftName.contains(<span class="string">"core"</span>)</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;399</td> <td class="nbHitsUncovered"><a title="Line 399: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 399: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> || !rightName.contains(<span class="string">"kernel"</span>) &amp;&amp; leftName.contains(<span class="string">"kernel"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;400</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; returnVal = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;401</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment">// } else if (leftName.matches(".*struts2\\-core.*") &amp;&amp; rightName.matches(".*xwork\\-core.*")) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;402</td> <td class="nbHits">&nbsp;</td>
@@ -697,8 +697,8 @@
<tr> <td class="numLineCover">&nbsp;415</td> <td class="nbHitsUncovered"><a title="Line 415: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 415: Conditional coverage 0% (0/2)."> returnVal = leftName.length() &lt;= rightName.length();</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;416</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;417</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"IsCore={} ({}, {})"</span>, returnVal, left.getFileName(), right.getFileName());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;418</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> returnVal;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;417</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"IsCore={} ({}, {})"</span>, returnVal, left.getFileName(), right.getFileName());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;418</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> returnVal;</pre></td></tr>
<tr> <td class="numLine">&nbsp;419</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;420</td> <td class="nbHits">&nbsp;</td>
@@ -723,11 +723,11 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;430</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> hashesMatch(Dependency dependency1, Dependency dependency2) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;431</td> <td class="nbHitsUncovered"><a title="Line 431: Conditional coverage 50% (4/8) [each condition: 50%, 50%, 50%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 431: Conditional coverage 50% (4/8) [each condition: 50%, 50%, 50%, 50%]."> <span class="keyword">if</span> (dependency1 == <span class="keyword">null</span> || dependency2 == <span class="keyword">null</span> || dependency1.getSha1sum() == <span class="keyword">null</span> || dependency2.getSha1sum() == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;431</td> <td class="nbHitsUncovered"><a title="Line 431: Conditional coverage 50% (4/8) [each condition: 50%, 50%, 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 431: Conditional coverage 50% (4/8) [each condition: 50%, 50%, 50%, 50%]."> <span class="keyword">if</span> (dependency1 == <span class="keyword">null</span> || dependency2 == <span class="keyword">null</span> || dependency1.getSha1sum() == <span class="keyword">null</span> || dependency2.getSha1sum() == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;432</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;433</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;434</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> dependency1.getSha1sum().equals(dependency2.getSha1sum());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;434</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> dependency1.getSha1sum().equals(dependency2.getSha1sum());</pre></td></tr>
<tr> <td class="numLine">&nbsp;435</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;436</td> <td class="nbHits">&nbsp;</td>
@@ -752,15 +752,15 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;446</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> isShadedJar(Dependency dependency, Dependency nextDependency) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;447</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String mainName = dependency.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;448</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String nextName = nextDependency.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;449</td> <td class="nbHitsUncovered"><a title="Line 449: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 449: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (mainName.endsWith(<span class="string">".jar"</span>) &amp;&amp; nextName.endsWith(<span class="string">"pom.xml"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;447</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String mainName = dependency.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;448</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String nextName = nextDependency.getFileName().toLowerCase();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;449</td> <td class="nbHitsUncovered"><a title="Line 449: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 449: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (mainName.endsWith(<span class="string">".jar"</span>) &amp;&amp; nextName.endsWith(<span class="string">"pom.xml"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;450</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> dependency.getIdentifiers().containsAll(nextDependency.getIdentifiers());</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;451</td> <td class="nbHitsUncovered"><a title="Line 451: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 451: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (nextName.endsWith(<span class="string">".jar"</span>) &amp;&amp; mainName.endsWith(<span class="string">"pom.xml"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;451</td> <td class="nbHitsUncovered"><a title="Line 451: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 451: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (nextName.endsWith(<span class="string">".jar"</span>) &amp;&amp; mainName.endsWith(<span class="string">"pom.xml"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;452</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> nextDependency.getIdentifiers().containsAll(dependency.getIdentifiers());</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;453</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;454</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;454</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;455</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;456</td> <td class="nbHits">&nbsp;</td>
@@ -785,17 +785,17 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;466</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">boolean</span> firstPathIsShortest(String left, String right) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;467</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String leftPath = left.replace(<span class="string">'\\'</span>, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;468</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String rightPath = right.replace(<span class="string">'\\'</span>, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;467</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String leftPath = left.replace(<span class="string">'\\'</span>, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;468</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String rightPath = right.replace(<span class="string">'\\'</span>, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;469</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;470</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> leftCount = countChar(leftPath, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;471</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> rightCount = countChar(rightPath, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;472</td> <td class="nbHitsCovered"><a title="Line 472: Conditional coverage 100% (2/2).">&nbsp;10</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 472: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (leftCount == rightCount) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;473</td> <td class="nbHitsCovered"><a title="Line 473: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 473: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> leftPath.compareTo(rightPath) &lt;= 0;</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;470</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> leftCount = countChar(leftPath, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;471</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> rightCount = countChar(rightPath, <span class="string">'/'</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;472</td> <td class="nbHitsCovered"><a title="Line 472: Conditional coverage 100% (2/2).">&nbsp;5</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 472: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (leftCount == rightCount) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;473</td> <td class="nbHitsCovered"><a title="Line 473: Conditional coverage 100% (2/2).">&nbsp;3</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 473: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> leftPath.compareTo(rightPath) &lt;= 0;</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;474</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;475</td> <td class="nbHitsCovered"><a title="Line 475: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 475: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> leftCount &lt; rightCount;</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;475</td> <td class="nbHitsCovered"><a title="Line 475: Conditional coverage 100% (2/2).">&nbsp;2</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 475: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> leftCount &lt; rightCount;</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;476</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;477</td> <td class="nbHits">&nbsp;</td>
@@ -818,16 +818,16 @@
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;486</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">int</span> countChar(String string, <span class="keyword">char</span> c) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;487</td> <td class="nbHitsCovered">&nbsp;20</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> count = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;488</td> <td class="nbHitsCovered">&nbsp;20</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> max = string.length();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;489</td> <td class="nbHitsCovered"><a title="Line 489: Conditional coverage 100% (2/2).">&nbsp;232</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 489: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; max; i++) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;490</td> <td class="nbHitsCovered"><a title="Line 490: Conditional coverage 100% (2/2).">&nbsp;212</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 490: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (c == string.charAt(i)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;491</td> <td class="nbHitsCovered">&nbsp;56</td> <td class="src"><pre class="src">&nbsp; count++;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;487</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> count = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;488</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> max = string.length();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;489</td> <td class="nbHitsCovered"><a title="Line 489: Conditional coverage 100% (2/2).">&nbsp;116</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 489: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; max; i++) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;490</td> <td class="nbHitsCovered"><a title="Line 490: Conditional coverage 100% (2/2).">&nbsp;106</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 490: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (c == string.charAt(i)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;491</td> <td class="nbHitsCovered">&nbsp;28</td> <td class="src"><pre class="src">&nbsp; count++;</pre></td></tr>
<tr> <td class="numLine">&nbsp;492</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;493</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;494</td> <td class="nbHitsCovered">&nbsp;20</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> count;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;494</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> count;</pre></td></tr>
<tr> <td class="numLine">&nbsp;495</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;496</td> <td class="nbHits">&nbsp;</td>
@@ -853,6 +853,6 @@
<td class="src"><pre class="src">&nbsp;}</pre></td></tr>
</table>
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 2.1.1 on 6/16/16 6:46 AM.</div>
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 2.1.1 on 7/31/16 7:42 AM.</div>
</body>
</html>