/usr/share/doc/libcobertura-java/api/src-html/net/sourceforge/cobertura/util/FileFinder.html is in libcobertura-java-doc 1.9.4.1+dfsg-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Cobertura - http://cobertura.sourceforge.net/<a name="line.2"></a>
<span class="sourceLineNo">003</span> *<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Copyright (C) 2005 Jeremy Thomerson<a name="line.4"></a>
<span class="sourceLineNo">005</span> * Copyright (C) 2005 Grzegorz Lukasik<a name="line.5"></a>
<span class="sourceLineNo">006</span> * Copyright (C) 2009 Charlie Squires<a name="line.6"></a>
<span class="sourceLineNo">007</span> * Copyright (C) 2009 John Lewis<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> * Cobertura is free software; you can redistribute it and/or modify<a name="line.9"></a>
<span class="sourceLineNo">010</span> * it under the terms of the GNU General Public License as published<a name="line.10"></a>
<span class="sourceLineNo">011</span> * by the Free Software Foundation; either version 2 of the License,<a name="line.11"></a>
<span class="sourceLineNo">012</span> * or (at your option) any later version.<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Cobertura is distributed in the hope that it will be useful, but<a name="line.14"></a>
<span class="sourceLineNo">015</span> * WITHOUT ANY WARRANTY; without even the implied warranty of<a name="line.15"></a>
<span class="sourceLineNo">016</span> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<a name="line.16"></a>
<span class="sourceLineNo">017</span> * General Public License for more details.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> * You should have received a copy of the GNU General Public License<a name="line.19"></a>
<span class="sourceLineNo">020</span> * along with Cobertura; if not, write to the Free Software<a name="line.20"></a>
<span class="sourceLineNo">021</span> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307<a name="line.21"></a>
<span class="sourceLineNo">022</span> * USA<a name="line.22"></a>
<span class="sourceLineNo">023</span> */<a name="line.23"></a>
<span class="sourceLineNo">024</span>package net.sourceforge.cobertura.util;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.io.File;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.io.FileInputStream;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.io.FilenameFilter;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.ArrayList;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.Enumeration;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.HashMap;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.HashSet;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Iterator;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.jar.JarEntry;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.jar.JarFile;<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.log4j.Logger;<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
<span class="sourceLineNo">045</span> * Maps source file names to existing files. After adding description<a name="line.45"></a>
<span class="sourceLineNo">046</span> * of places files can be found in, it can be used to localize <a name="line.46"></a>
<span class="sourceLineNo">047</span> * the files. <a name="line.47"></a>
<span class="sourceLineNo">048</span> * <a name="line.48"></a>
<span class="sourceLineNo">049</span> * <p><a name="line.49"></a>
<span class="sourceLineNo">050</span> * FileFinder supports two types of source files locations:<a name="line.50"></a>
<span class="sourceLineNo">051</span> * <ul><a name="line.51"></a>
<span class="sourceLineNo">052</span> * <li>source root directory, defines the directory under <a name="line.52"></a>
<span class="sourceLineNo">053</span> * which source files are located,</li><a name="line.53"></a>
<span class="sourceLineNo">054</span> * <li>pair (base directory, file path relative to base directory).</li><a name="line.54"></a>
<span class="sourceLineNo">055</span> * </ul><a name="line.55"></a>
<span class="sourceLineNo">056</span> * The difference between these two is that in case of the first you add all<a name="line.56"></a>
<span class="sourceLineNo">057</span> * source files under the specified root directory, and in the second you add<a name="line.57"></a>
<span class="sourceLineNo">058</span> * exactly one file. In both cases file to be found has to be located under <a name="line.58"></a>
<span class="sourceLineNo">059</span> * subdirectory that maps to package definition provided with the source file name. <a name="line.59"></a>
<span class="sourceLineNo">060</span> * <a name="line.60"></a>
<span class="sourceLineNo">061</span> * @author Jeremy Thomerson<a name="line.61"></a>
<span class="sourceLineNo">062</span> */<a name="line.62"></a>
<span class="sourceLineNo">063</span>public class FileFinder {<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span> private static Logger LOGGER = Logger.getLogger(FileFinder.class);<a name="line.65"></a>
<span class="sourceLineNo">066</span> <a name="line.66"></a>
<span class="sourceLineNo">067</span> // Contains Strings with directory paths<a name="line.67"></a>
<span class="sourceLineNo">068</span> private Set sourceDirectories = new HashSet();<a name="line.68"></a>
<span class="sourceLineNo">069</span> <a name="line.69"></a>
<span class="sourceLineNo">070</span> // Contains pairs (String directoryRoot, Set fileNamesRelativeToRoot)<a name="line.70"></a>
<span class="sourceLineNo">071</span> private Map sourceFilesMap = new HashMap();<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span> /**<a name="line.73"></a>
<span class="sourceLineNo">074</span> * Adds directory that is a root of sources. A source file<a name="line.74"></a>
<span class="sourceLineNo">075</span> * that is under this directory will be found if relative<a name="line.75"></a>
<span class="sourceLineNo">076</span> * path to the file from root matches package name.<a name="line.76"></a>
<span class="sourceLineNo">077</span> * <p><a name="line.77"></a>
<span class="sourceLineNo">078</span> * Example:<a name="line.78"></a>
<span class="sourceLineNo">079</span> * <pre><a name="line.79"></a>
<span class="sourceLineNo">080</span> * fileFinder.addSourceDirectory( "C:/MyProject/src/main");<a name="line.80"></a>
<span class="sourceLineNo">081</span> * fileFinder.addSourceDirectory( "C:/MyProject/src/test");<a name="line.81"></a>
<span class="sourceLineNo">082</span> * </pre><a name="line.82"></a>
<span class="sourceLineNo">083</span> * In path both / and \ can be used.<a name="line.83"></a>
<span class="sourceLineNo">084</span> * </p> <a name="line.84"></a>
<span class="sourceLineNo">085</span> * <a name="line.85"></a>
<span class="sourceLineNo">086</span> * @param directory The root of source files <a name="line.86"></a>
<span class="sourceLineNo">087</span> * @throws NullPointerException if <code>directory</code> is <code>null</code><a name="line.87"></a>
<span class="sourceLineNo">088</span> */<a name="line.88"></a>
<span class="sourceLineNo">089</span> public void addSourceDirectory( String directory) {<a name="line.89"></a>
<span class="sourceLineNo">090</span> if( LOGGER.isDebugEnabled())<a name="line.90"></a>
<span class="sourceLineNo">091</span> LOGGER.debug( "Adding sourceDirectory=[" + directory + "]");<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span> // Change \ to / in case of Windows users<a name="line.93"></a>
<span class="sourceLineNo">094</span> directory = getCorrectedPath(directory);<a name="line.94"></a>
<span class="sourceLineNo">095</span> sourceDirectories.add(directory);<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span> /**<a name="line.98"></a>
<span class="sourceLineNo">099</span> * Adds file by specifying root directory and relative path to the<a name="line.99"></a>
<span class="sourceLineNo">100</span> * file in it. Adds exactly one file, relative path should match<a name="line.100"></a>
<span class="sourceLineNo">101</span> * package that the source file is in, otherwise it will be not<a name="line.101"></a>
<span class="sourceLineNo">102</span> * found later.<a name="line.102"></a>
<span class="sourceLineNo">103</span> * <p><a name="line.103"></a>
<span class="sourceLineNo">104</span> * Example:<a name="line.104"></a>
<span class="sourceLineNo">105</span> * <pre><a name="line.105"></a>
<span class="sourceLineNo">106</span> * fileFinder.addSourceFile( "C:/MyProject/src/main", "com/app/MyClass.java");<a name="line.106"></a>
<span class="sourceLineNo">107</span> * fileFinder.addSourceFile( "C:/MyProject/src/test", "com/app/MyClassTest.java");<a name="line.107"></a>
<span class="sourceLineNo">108</span> * </pre><a name="line.108"></a>
<span class="sourceLineNo">109</span> * In paths both / and \ can be used.<a name="line.109"></a>
<span class="sourceLineNo">110</span> * </p><a name="line.110"></a>
<span class="sourceLineNo">111</span> * <a name="line.111"></a>
<span class="sourceLineNo">112</span> * @param baseDir sources root directory<a name="line.112"></a>
<span class="sourceLineNo">113</span> * @param file path to source file relative to <code>baseDir</code><a name="line.113"></a>
<span class="sourceLineNo">114</span> * @throws NullPointerException if either <code>baseDir</code> or <code>file</code> is <code>null</code><a name="line.114"></a>
<span class="sourceLineNo">115</span> */<a name="line.115"></a>
<span class="sourceLineNo">116</span> public void addSourceFile( String baseDir, String file) {<a name="line.116"></a>
<span class="sourceLineNo">117</span> if( LOGGER.isDebugEnabled())<a name="line.117"></a>
<span class="sourceLineNo">118</span> LOGGER.debug( "Adding sourceFile baseDir=[" + baseDir + "] file=[" + file + "]");<a name="line.118"></a>
<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span> if( baseDir==null || file==null)<a name="line.120"></a>
<span class="sourceLineNo">121</span> throw new NullPointerException();<a name="line.121"></a>
<span class="sourceLineNo">122</span> <a name="line.122"></a>
<span class="sourceLineNo">123</span> // Change \ to / in case of Windows users<a name="line.123"></a>
<span class="sourceLineNo">124</span> file = getCorrectedPath( file);<a name="line.124"></a>
<span class="sourceLineNo">125</span> baseDir = getCorrectedPath( baseDir);<a name="line.125"></a>
<span class="sourceLineNo">126</span> <a name="line.126"></a>
<span class="sourceLineNo">127</span> // Add file to sourceFilesMap<a name="line.127"></a>
<span class="sourceLineNo">128</span> Set container = (Set) sourceFilesMap.get(baseDir);<a name="line.128"></a>
<span class="sourceLineNo">129</span> if( container==null) {<a name="line.129"></a>
<span class="sourceLineNo">130</span> container = new HashSet();<a name="line.130"></a>
<span class="sourceLineNo">131</span> sourceFilesMap.put( baseDir, container);<a name="line.131"></a>
<span class="sourceLineNo">132</span> }<a name="line.132"></a>
<span class="sourceLineNo">133</span> container.add( file);<a name="line.133"></a>
<span class="sourceLineNo">134</span> }<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span> /**<a name="line.136"></a>
<span class="sourceLineNo">137</span> * Maps source file name to existing file.<a name="line.137"></a>
<span class="sourceLineNo">138</span> * When mapping file name first values that were added with<a name="line.138"></a>
<span class="sourceLineNo">139</span> * {@link #addSourceDirectory} and later added with {@link #addSourceFile} are checked.<a name="line.139"></a>
<span class="sourceLineNo">140</span> * <a name="line.140"></a>
<span class="sourceLineNo">141</span> * @param fileName source file to be mapped<a name="line.141"></a>
<span class="sourceLineNo">142</span> * @return existing file that maps to passed sourceFile <a name="line.142"></a>
<span class="sourceLineNo">143</span> * @throws IOException if cannot map source file to existing file<a name="line.143"></a>
<span class="sourceLineNo">144</span> * @throws NullPointerException if fileName is null<a name="line.144"></a>
<span class="sourceLineNo">145</span> */<a name="line.145"></a>
<span class="sourceLineNo">146</span> public File getFileForSource(String fileName) throws IOException {<a name="line.146"></a>
<span class="sourceLineNo">147</span> // Correct file name<a name="line.147"></a>
<span class="sourceLineNo">148</span> if( LOGGER.isDebugEnabled())<a name="line.148"></a>
<span class="sourceLineNo">149</span> LOGGER.debug( "Searching for file, name=[" + fileName + "]");<a name="line.149"></a>
<span class="sourceLineNo">150</span> fileName = getCorrectedPath( fileName);<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span> // Check inside sourceDirectories<a name="line.152"></a>
<span class="sourceLineNo">153</span> for( Iterator it=sourceDirectories.iterator(); it.hasNext();) {<a name="line.153"></a>
<span class="sourceLineNo">154</span> String directory = (String)it.next();<a name="line.154"></a>
<span class="sourceLineNo">155</span> File file = new File( directory, fileName);<a name="line.155"></a>
<span class="sourceLineNo">156</span> if( file.isFile()) {<a name="line.156"></a>
<span class="sourceLineNo">157</span> LOGGER.debug( "Found inside sourceDirectories");<a name="line.157"></a>
<span class="sourceLineNo">158</span> return file;<a name="line.158"></a>
<span class="sourceLineNo">159</span> }<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span> <a name="line.161"></a>
<span class="sourceLineNo">162</span> // Check inside sourceFilesMap<a name="line.162"></a>
<span class="sourceLineNo">163</span> for( Iterator it=sourceFilesMap.keySet().iterator(); it.hasNext();) {<a name="line.163"></a>
<span class="sourceLineNo">164</span> String directory = (String)it.next();<a name="line.164"></a>
<span class="sourceLineNo">165</span> Set container = (Set) sourceFilesMap.get(directory);<a name="line.165"></a>
<span class="sourceLineNo">166</span> if( !container.contains( fileName))<a name="line.166"></a>
<span class="sourceLineNo">167</span> continue;<a name="line.167"></a>
<span class="sourceLineNo">168</span> File file = new File( directory, fileName);<a name="line.168"></a>
<span class="sourceLineNo">169</span> if( file.isFile()) {<a name="line.169"></a>
<span class="sourceLineNo">170</span> LOGGER.debug( "Found inside sourceFilesMap");<a name="line.170"></a>
<span class="sourceLineNo">171</span> return file;<a name="line.171"></a>
<span class="sourceLineNo">172</span> }<a name="line.172"></a>
<span class="sourceLineNo">173</span> }<a name="line.173"></a>
<span class="sourceLineNo">174</span><a name="line.174"></a>
<span class="sourceLineNo">175</span> // Have not found? Throw an error.<a name="line.175"></a>
<span class="sourceLineNo">176</span> LOGGER.debug( "File not found");<a name="line.176"></a>
<span class="sourceLineNo">177</span> throw new IOException( "Cannot find source file, name=["+fileName+"]");<a name="line.177"></a>
<span class="sourceLineNo">178</span> }<a name="line.178"></a>
<span class="sourceLineNo">179</span> <a name="line.179"></a>
<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
<span class="sourceLineNo">181</span> * Maps source file name to existing file or source archive.<a name="line.181"></a>
<span class="sourceLineNo">182</span> * When mapping file name first values that were added with<a name="line.182"></a>
<span class="sourceLineNo">183</span> * {@link #addSourceDirectory} and later added with {@link #addSourceFile} are checked.<a name="line.183"></a>
<span class="sourceLineNo">184</span> * <a name="line.184"></a>
<span class="sourceLineNo">185</span> * @param fileName source file to be mapped<a name="line.185"></a>
<span class="sourceLineNo">186</span> * @return Source that maps to passed sourceFile or null if it can't be found<a name="line.186"></a>
<span class="sourceLineNo">187</span> * @throws NullPointerException if fileName is null<a name="line.187"></a>
<span class="sourceLineNo">188</span> */<a name="line.188"></a>
<span class="sourceLineNo">189</span> public Source getSource(String fileName) {<a name="line.189"></a>
<span class="sourceLineNo">190</span> File file = null;<a name="line.190"></a>
<span class="sourceLineNo">191</span> try<a name="line.191"></a>
<span class="sourceLineNo">192</span> {<a name="line.192"></a>
<span class="sourceLineNo">193</span> file = getFileForSource(fileName);<a name="line.193"></a>
<span class="sourceLineNo">194</span> return new Source(new FileInputStream(file), file);<a name="line.194"></a>
<span class="sourceLineNo">195</span> }<a name="line.195"></a>
<span class="sourceLineNo">196</span> catch (IOException e)<a name="line.196"></a>
<span class="sourceLineNo">197</span> {<a name="line.197"></a>
<span class="sourceLineNo">198</span> //Source file wasn't found. Try searching archives.<a name="line.198"></a>
<span class="sourceLineNo">199</span> return searchJarsForSource(fileName);<a name="line.199"></a>
<span class="sourceLineNo">200</span> }<a name="line.200"></a>
<span class="sourceLineNo">201</span> <a name="line.201"></a>
<span class="sourceLineNo">202</span> }<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span> /**<a name="line.204"></a>
<span class="sourceLineNo">205</span> * Gets a BufferedReader for a file within a jar.<a name="line.205"></a>
<span class="sourceLineNo">206</span> * <a name="line.206"></a>
<span class="sourceLineNo">207</span> * @param fileName source file to get an input stream for<a name="line.207"></a>
<span class="sourceLineNo">208</span> * @return Source for existing file inside a jar that maps to passed sourceFile <a name="line.208"></a>
<span class="sourceLineNo">209</span> * or null if cannot map source file to existing file<a name="line.209"></a>
<span class="sourceLineNo">210</span> */<a name="line.210"></a>
<span class="sourceLineNo">211</span> private Source searchJarsForSource(String fileName) {<a name="line.211"></a>
<span class="sourceLineNo">212</span> //Check inside jars in sourceDirectories<a name="line.212"></a>
<span class="sourceLineNo">213</span> for( Iterator it=sourceDirectories.iterator(); it.hasNext();) {<a name="line.213"></a>
<span class="sourceLineNo">214</span> String directory = (String)it.next();<a name="line.214"></a>
<span class="sourceLineNo">215</span> File file = new File(directory);<a name="line.215"></a>
<span class="sourceLineNo">216</span> //Get a list of jars and zips in the directory<a name="line.216"></a>
<span class="sourceLineNo">217</span> String[] jars = file.list(new JarZipFilter());<a name="line.217"></a>
<span class="sourceLineNo">218</span> if(jars != null) {<a name="line.218"></a>
<span class="sourceLineNo">219</span> for(String jar : jars) {<a name="line.219"></a>
<span class="sourceLineNo">220</span> try<a name="line.220"></a>
<span class="sourceLineNo">221</span> {<a name="line.221"></a>
<span class="sourceLineNo">222</span> LOGGER.debug("Looking for: " + fileName + " in "+ jar);<a name="line.222"></a>
<span class="sourceLineNo">223</span> JarFile jf = new JarFile(directory + "/" + jar);<a name="line.223"></a>
<span class="sourceLineNo">224</span> <a name="line.224"></a>
<span class="sourceLineNo">225</span> //Get a list of files in the jar<a name="line.225"></a>
<span class="sourceLineNo">226</span> Enumeration<JarEntry> files = jf.entries();<a name="line.226"></a>
<span class="sourceLineNo">227</span> //See if the jar has the class we need<a name="line.227"></a>
<span class="sourceLineNo">228</span> while(files.hasMoreElements()) {<a name="line.228"></a>
<span class="sourceLineNo">229</span> JarEntry entry = files.nextElement();<a name="line.229"></a>
<span class="sourceLineNo">230</span> if(entry.getName().equals(fileName)) {<a name="line.230"></a>
<span class="sourceLineNo">231</span> return new Source(jf.getInputStream(entry), jf);<a name="line.231"></a>
<span class="sourceLineNo">232</span> }<a name="line.232"></a>
<span class="sourceLineNo">233</span> }<a name="line.233"></a>
<span class="sourceLineNo">234</span> }<a name="line.234"></a>
<span class="sourceLineNo">235</span> catch (Throwable t)<a name="line.235"></a>
<span class="sourceLineNo">236</span> {<a name="line.236"></a>
<span class="sourceLineNo">237</span> LOGGER.warn("Error while reading " + jar, t);<a name="line.237"></a>
<span class="sourceLineNo">238</span> }<a name="line.238"></a>
<span class="sourceLineNo">239</span> }<a name="line.239"></a>
<span class="sourceLineNo">240</span> }<a name="line.240"></a>
<span class="sourceLineNo">241</span> }<a name="line.241"></a>
<span class="sourceLineNo">242</span> return null;<a name="line.242"></a>
<span class="sourceLineNo">243</span> }<a name="line.243"></a>
<span class="sourceLineNo">244</span><a name="line.244"></a>
<span class="sourceLineNo">245</span> /**<a name="line.245"></a>
<span class="sourceLineNo">246</span> * Returns a list with string for all source directories.<a name="line.246"></a>
<span class="sourceLineNo">247</span> * Example: <code>[C:/MyProject/src/main,C:/MyProject/src/test]</code><a name="line.247"></a>
<span class="sourceLineNo">248</span> * <a name="line.248"></a>
<span class="sourceLineNo">249</span> * @return list with Strings for all source roots, or empty list if no source roots were specified <a name="line.249"></a>
<span class="sourceLineNo">250</span> */<a name="line.250"></a>
<span class="sourceLineNo">251</span> public List getSourceDirectoryList() {<a name="line.251"></a>
<span class="sourceLineNo">252</span> // Get names from sourceDirectories<a name="line.252"></a>
<span class="sourceLineNo">253</span> List result = new ArrayList();<a name="line.253"></a>
<span class="sourceLineNo">254</span> for( Iterator it=sourceDirectories.iterator(); it.hasNext();) {<a name="line.254"></a>
<span class="sourceLineNo">255</span> result.add( it.next());<a name="line.255"></a>
<span class="sourceLineNo">256</span> }<a name="line.256"></a>
<span class="sourceLineNo">257</span> <a name="line.257"></a>
<span class="sourceLineNo">258</span> // Get names from sourceFilesMap<a name="line.258"></a>
<span class="sourceLineNo">259</span> for( Iterator it=sourceFilesMap.keySet().iterator(); it.hasNext();) {<a name="line.259"></a>
<span class="sourceLineNo">260</span> result.add(it.next());<a name="line.260"></a>
<span class="sourceLineNo">261</span> }<a name="line.261"></a>
<span class="sourceLineNo">262</span> <a name="line.262"></a>
<span class="sourceLineNo">263</span> // Return combined names<a name="line.263"></a>
<span class="sourceLineNo">264</span> return result;<a name="line.264"></a>
<span class="sourceLineNo">265</span> }<a name="line.265"></a>
<span class="sourceLineNo">266</span><a name="line.266"></a>
<span class="sourceLineNo">267</span> private String getCorrectedPath(String path) {<a name="line.267"></a>
<span class="sourceLineNo">268</span> return path.replace('\\', '/');<a name="line.268"></a>
<span class="sourceLineNo">269</span> }<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span> /**<a name="line.271"></a>
<span class="sourceLineNo">272</span> * Returns string representation of FileFinder.<a name="line.272"></a>
<span class="sourceLineNo">273</span> */<a name="line.273"></a>
<span class="sourceLineNo">274</span> public String toString() {<a name="line.274"></a>
<span class="sourceLineNo">275</span> return "FileFinder, source directories: " + getSourceDirectoryList().toString();<a name="line.275"></a>
<span class="sourceLineNo">276</span> }<a name="line.276"></a>
<span class="sourceLineNo">277</span> <a name="line.277"></a>
<span class="sourceLineNo">278</span> /**<a name="line.278"></a>
<span class="sourceLineNo">279</span> * A filter that accepts files that end in .jar or .zip<a name="line.279"></a>
<span class="sourceLineNo">280</span> */<a name="line.280"></a>
<span class="sourceLineNo">281</span> private class JarZipFilter implements FilenameFilter {<a name="line.281"></a>
<span class="sourceLineNo">282</span> public boolean accept(File dir, String name) {<a name="line.282"></a>
<span class="sourceLineNo">283</span> return(name.endsWith(".jar") || name.endsWith(".zip"));<a name="line.283"></a>
<span class="sourceLineNo">284</span> }<a name="line.284"></a>
<span class="sourceLineNo">285</span> }<a name="line.285"></a>
<span class="sourceLineNo">286</span>}<a name="line.286"></a>
</pre>
</div>
</body>
</html>
|