/** * Adds a source path element * * @param string element */ public function addSourcePath($element) { $resolved = realpath($element); if (is_dir($resolved)) { $l = FileSystemClassLoader::instanceFor($resolved, FALSE); } else { if (is_file($resolved)) { $l = ArchiveClassLoader::instanceFor($resolved, FALSE); } else { throw new IllegalArgumentException('Sourcepath element [' . $element . '] not found'); } } $this->sourcepath[$l->hashCode()] = $l; }
/** * Gets base folder * * @param io.Folder */ public function setBase(Folder $base) { $this->base = new Folder($base, '..'); // Scan base path. FIXME: Refactor this to use lang.ClassLoader // instead of duplication its sourcecode here foreach (array_filter(explode(PATH_SEPARATOR, scanpath(array($base->getURI()), getenv('HOME')))) as $element) { $resolved = realpath($element); if (is_dir($resolved)) { $this->cl[] = FileSystemClassLoader::instanceFor($resolved, FALSE); } else { if (is_file($resolved)) { $this->cl[] = ArchiveClassLoader::instanceFor($resolved, FALSE); } } } }
/** * Register a class loader from a path * * @param string element * @param bool before default FALSE whether to register this as the first loader, * NULL wheather to figure out position by inspecting $element * @return lang.IClassLoader the registered loader * @throws lang.ElementNotFoundException if the path cannot be found */ public static function registerPath($element, $before = FALSE) { if (NULL === $before && '!' === $element[0]) { $before = TRUE; $element = substr($element, 1); } else { $before = (bool) $before; } if (is_dir($element)) { return self::registerLoader(FileSystemClassLoader::instanceFor($element), $before); } else { if (is_file($element)) { return self::registerLoader(ArchiveClassLoader::instanceFor($element), $before); } } raise('lang.ElementNotFoundException', 'Element "' . $element . '" not found'); }