1 package org.codehaus.plexus.compiler.eclipse;
2
3 /**
4 * The MIT License
5 * <p>
6 * Copyright (c) 2005, The Codehaus
7 * <p>
8 * Permission is hereby granted, free of charge, to any person obtaining a copy of
9 * this software and associated documentation files (the "Software"), to deal in
10 * the Software without restriction, including without limitation the rights to
11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12 * of the Software, and to permit persons to whom the Software is furnished to do
13 * so, subject to the following conditions:
14 * <p>
15 * The above copyright notice and this permission notice shall be included in all
16 * copies or substantial portions of the Software.
17 * <p>
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 * SOFTWARE.
25 */
26 import java.io.File;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31 /**
32 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
33 */
34 public class SourceCodeLocator {
35 private List<String> sourceRoots;
36
37 private Map<String, File> cache;
38
39 public SourceCodeLocator(List<String> sourceRoots) {
40 this.sourceRoots = sourceRoots;
41
42 cache = new HashMap<>();
43 }
44
45 public File findSourceCodeForClass(String className) {
46 File f = cache.get(className);
47
48 if (f != null) {
49 return f;
50 }
51
52 String sourceName =
53 className.replace('.', System.getProperty("file.separator").charAt(0));
54
55 sourceName += ".java";
56
57 f = findInRoots(sourceName);
58
59 cache.put(className, f);
60
61 return f;
62 }
63
64 private File findInRoots(String s) {
65 for (String root : sourceRoots) {
66 File f = new File(root, s);
67
68 if (f.exists()) {
69 return f;
70 }
71 }
72
73 return null;
74 }
75 }