Exemplo n.º 1
0
 /**
  * Gets a Reflection_Source knowing its class _name.
  * Uses sources cache, or router's getClassFilename() and fill-in cache.
  *
  * @param $class_name string
  * @return Reflection_Source
  */
 public function getClassFilename($class_name)
 {
     if (isset($this->sources_cache[$class_name])) {
         return $this->sources_cache[$class_name];
     } else {
         /** @var $router Router */
         $router = Session::current()->plugins->get(Router::class);
         if (Builder::isBuilt($class_name)) {
             $file_name = $this->getCacheDir() . SL . str_replace(SL, '-', Names::classToPath($class_name));
         } else {
             $file_name = $router->getClassFilename($class_name);
         }
         $source = new Reflection_Source($file_name, $this, $class_name);
         foreach (array_keys($source->getClasses()) as $class_name) {
             $this->sources_cache[$class_name] = $source;
             if (count($this->sources_cache) > self::MAX_OPENED_SOURCES) {
                 $source->free(self::SOURCES_FREE);
             }
         }
         return $this->sources_cache[$class_name];
     }
 }