Clover coverage report - DynamicJava Test Coverage (dynamicjava-20130622-r5436)
Coverage timestamp: Sat Jun 22 2013 03:01:29 CDT
file stats: LOC: 67   Methods: 12
NCLOC: 49   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
LibraryContext.java 37.5% 71.4% 66.7% 63.4%
coverage coverage
 1    package edu.rice.cs.dynamicjava.interpreter;
 2   
 3    import edu.rice.cs.dynamicjava.symbol.DJClass;
 4    import edu.rice.cs.dynamicjava.symbol.Library;
 5    import edu.rice.cs.dynamicjava.symbol.TypeSystem;
 6    import edu.rice.cs.dynamicjava.symbol.type.ClassType;
 7    import edu.rice.cs.dynamicjava.symbol.type.VariableType;
 8    import edu.rice.cs.plt.iter.IterUtil;
 9   
 10    /** A context that can access top-level classes from a {@link Library}. */
 11    public class LibraryContext extends DelegatingContext {
 12   
 13    private final Library _library;
 14   
 15    /** Create a LibraryContext that delegates to the given context (typically another LibraryContext). */
 16  183 public LibraryContext(TypeContext next, Library lib) {
 17  183 super(next);
 18  183 _library = lib;
 19    }
 20   
 21    /** Create a LibraryContext that delegates to the BaseContext. */
 22  183 public LibraryContext(Library lib) { this(BaseContext.INSTANCE, lib); }
 23   
 24  0 protected TypeContext duplicate(TypeContext next) {
 25  0 return new LibraryContext(next, _library);
 26    }
 27   
 28  0 @Override public boolean typeExists(String name, TypeSystem ts) {
 29  0 return hasClass(name) || super.typeExists(name, ts);
 30    }
 31   
 32  1473 @Override public boolean topLevelClassExists(String name, TypeSystem ts) {
 33  1473 return hasClass(name) || super.topLevelClassExists(name, ts);
 34    }
 35   
 36  3449 @Override public DJClass getTopLevelClass(String name, TypeSystem ts) throws AmbiguousNameException {
 37  3449 Iterable<DJClass> matches = _library.declaredClasses(name);
 38  3449 int size = IterUtil.sizeOf(matches, 2);
 39  3449 switch (size) {
 40  1853 case 0: return super.getTopLevelClass(name, ts);
 41  1596 case 1: return IterUtil.first(matches);
 42  0 default: throw new AmbiguousNameException();
 43    }
 44    }
 45   
 46  0 @Override public boolean memberClassExists(String name, TypeSystem ts) {
 47  0 return hasClass(name) ? false : super.memberClassExists(name, ts);
 48    }
 49   
 50  1702 @Override public ClassType typeContainingMemberClass(String name, TypeSystem ts) throws AmbiguousNameException {
 51  1702 return hasClass(name) ? null : super.typeContainingMemberClass(name, ts);
 52    }
 53   
 54  0 @Override public boolean typeVariableExists(String name, TypeSystem ts) {
 55  0 return hasClass(name) ? false : super.typeVariableExists(name, ts);
 56    }
 57   
 58  468 @Override public VariableType getTypeVariable(String name, TypeSystem ts) {
 59  468 return hasClass(name) ? null : super.getTypeVariable(name, ts);
 60    }
 61   
 62  3643 private boolean hasClass(String name) {
 63  3643 return !IterUtil.isEmpty(_library.declaredClasses(name));
 64    }
 65   
 66  43 @Override public ClassLoader getClassLoader() { return _library.classLoader(); }
 67    }