Coverage Report - org.codehaus.plexus.compiler.eclipse.SourceCodeLocator
 
Classes in this File Line Coverage Branch Coverage Complexity
SourceCodeLocator
88%
16/18
66%
4/6
2,667
 
 1  
 package org.codehaus.plexus.compiler.eclipse;
 2  
 
 3  
 /**
 4  
  * The MIT License
 5  
  *
 6  
  * Copyright (c) 2005, The Codehaus
 7  
  *
 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  
  *
 15  
  * The above copyright notice and this permission notice shall be included in all
 16  
  * copies or substantial portions of the Software.
 17  
  *
 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  
 
 27  
 import java.util.List;
 28  
 import java.util.Map;
 29  
 import java.util.HashMap;
 30  
 import java.io.File;
 31  
 
 32  
 /**
 33  
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
 34  
  */
 35  
 public class SourceCodeLocator
 36  
 {
 37  
     private List<String> sourceRoots;
 38  
 
 39  
     private Map<String, File> cache;
 40  
 
 41  
     public SourceCodeLocator( List<String> sourceRoots )
 42  11
     {
 43  11
         this.sourceRoots = sourceRoots;
 44  
 
 45  11
         cache = new HashMap<String, File>();
 46  11
     }
 47  
 
 48  
     public File findSourceCodeForClass( String className )
 49  
     {
 50  118
         File f = cache.get( className );
 51  
 
 52  118
         if ( f != null )
 53  
         {
 54  0
             return f;
 55  
         }
 56  
 
 57  118
         String sourceName = className.replace( '.', System.getProperty( "file.separator" ).charAt( 0 ) );
 58  
 
 59  118
         sourceName += ".java";
 60  
 
 61  118
         f = findInRoots( sourceName );
 62  
 
 63  118
         cache.put( className, f );
 64  
 
 65  118
         return f;
 66  
     }
 67  
 
 68  
     private File findInRoots( String s )
 69  
     {
 70  118
         for ( String root : sourceRoots )
 71  
         {
 72  118
             File f = new File( root, s );
 73  
 
 74  118
             if ( f.exists() )
 75  
             {
 76  0
                 return f;
 77  
             }
 78  118
         }
 79  
 
 80  118
         return null;
 81  
     }
 82  
 }