public synchronized TextSource getInThisContext(String anotherPath, Set<TextSource> parents) throws Exception {    
    if (depLoaderMap==null)
      depLoaderMap=new HashMap<String,TextSource>();
    TextSource d=(TextSource)depLoaderMap.get(anotherPath);
    parents.add(this);
    if (d==null){
      d=textLoadMgr.getSource(textLoader.getAbsolutePath(anotherPath));
      d.check();
      depLoaderMap.put(anotherPath, d);
      setLastModified(d.getLastModified());
    }
    if (parents!=null && parents.contains(d))
      throw new CircularPathException();
    parents.add(d);
    //If d already exists, there is no need to run check() because the containing TextSource
    //already check()'s d when the container check()'s itself. This way we don't get punished for
    //including a template several times.
    return d;
  }