Exemplo n.º 1
0
 /**
  * @param $source   Reflection_Source
  * @param $compiler PHP\Compiler
  * @return boolean
  */
 public function compile(Reflection_Source $source, PHP\Compiler $compiler = null)
 {
     $classes = $source->getClasses();
     if ($class = reset($classes)) {
         if ($this->compileClass($class)) {
             return true;
         }
     }
     return false;
 }
Exemplo n.º 2
0
 /**
  * @param $source Reflection_Source
  */
 public function onCompileSource(Reflection_Source $source)
 {
     Dao::begin();
     foreach ($source->getClasses() as $class) {
         /** @var $log Compiler_Log */
         $log = Builder::create(Compiler_Log::class);
         $log->class_name = $class->getName();
         $log->date_time = Date_Time::now();
         Dao::write($log);
         $this->log_flag = true;
     }
     Dao::commit();
 }
Exemplo n.º 3
0
 /**
  * Compile built classes
  *
  * @param $source   Reflection_Source
  * @param $compiler PHP\Compiler
  * @return boolean
  */
 public function compile(Reflection_Source $source, PHP\Compiler $compiler = null)
 {
     $builder = Builder::current();
     $builder->build = false;
     $compiled = false;
     foreach ($source->getClasses() as $class) {
         $replacement = $builder->getComposition($class->name);
         if (is_array($replacement)) {
             foreach (Class_Builder::build($class->name, $replacement, true) as $built_source) {
                 $compiler->addSource((new Reflection_Source())->setSource('<?php' . LF . $built_source));
                 $compiled = true;
             }
         }
     }
     $builder->build = true;
     return $compiled;
 }
Exemplo n.º 4
0
 /**
  * @param $source   Reflection_Source the PHP source file object
  * @param $compiler PHP\Compiler the main compiler
  * @return boolean true if compilation process did something, else false
  */
 public function compile(Reflection_Source $source, PHP\Compiler $compiler = null)
 {
     $compiled = false;
     foreach ($source->getClasses() as $class) {
         // replace extends with the built replacement class
         if (!Builder::isBuilt($class->name)) {
             $parent_class_name = $class->getParentName();
             if ($parent_class_name) {
                 $replacement_class_name = Builder::className($parent_class_name);
                 if ($replacement_class_name != $parent_class_name) {
                     $class_exists = class_exists($replacement_class_name, false);
                     if ($class_exists && is_a($replacement_class_name, $parent_class_name) || !$class_exists && Reflection_Source::of($replacement_class_name)->getClass($replacement_class_name)->isA($class->name)) {
                         $replacement_class_name = $parent_class_name;
                     }
                 }
                 if (is_array($replacement_class_name)) {
                     trigger_error("Replacement classes should all be compiled", E_USER_ERROR);
                     $compiler->addSource($source);
                 } elseif ($replacement_class_name !== $parent_class_name && Builder::isBuilt($replacement_class_name)) {
                     $extended = null;
                     $buffer = $source->getSource();
                     $short_class_name = Namespaces::shortClassName($class->name);
                     $buffer = preg_replace_callback('%(\\s+class\\s+' . $short_class_name . '\\s+extends\\s+)([\\\\\\w]+)(\\s+)%', function ($match) use(&$extended, $replacement_class_name) {
                         $extended = $match[2];
                         return $match[1] . BS . $replacement_class_name . $match[3];
                     }, $buffer);
                     if ($extended) {
                         $buffer = preg_replace_callback('%(\\n\\s+\\*\\s+@link\\s+)(' . str_replace(BS, BS . BS, $extended) . ')(\\s+)%', function ($match) use($replacement_class_name) {
                             return $match[1] . BS . $replacement_class_name . $match[3];
                         }, $buffer);
                     }
                     $source->setSource($buffer);
                     $compiled = true;
                 }
             }
         }
     }
     return $compiled;
 }
Exemplo n.º 5
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];
     }
 }
Exemplo n.º 6
0
 /**
  * Compile source file into its class path
  *
  * @param $source   Reflection_Source
  * @param $compiler Compiler
  * @return boolean false as this compilation does not modify the class source
  */
 public function compile(Reflection_Source $source, Compiler $compiler = null)
 {
     foreach ($source->getClasses() as $class) {
         // class name to file path
         if (!isset($this->class_paths[$class->name]) || $this->class_paths[$class->name] !== $source->file_name) {
             $this->class_paths[$class->name] = $source->file_name;
             $this->changes = true;
         }
         // set class name to class name
         $set_class_name = $class->getSetClassName();
         if (!isset($this->element_class_names[$set_class_name]) || $this->element_class_names[$set_class_name] !== $class->name) {
             $this->element_class_names[$set_class_name] = $class->name;
             $this->changes = true;
         }
         /*
         // short class name to class name
         $short_class_name = Namespaces::shortClassName($class->name);
         if (
         	!isset($this->full_class_names[$short_class_name])
         	|| ($this->full_class_names[$short_class_name] !== $class->name)
         ) {
         	$this->full_class_names[$short_class_name] = $class->name;
         	$this->changes = true;
         }
         */
         /*
         // set short class name to set class name
         $short_class_name = Namespaces::shortClassName($set_class_name);
         if (
         	!isset($this->full_class_names[$short_class_name])
         	|| ($this->full_class_names[$short_class_name] !== $set_class_name)
         ) {
         	$this->full_class_names[$short_class_name] = $set_class_name;
         	$this->changes = true;
         }
         */
     }
     return false;
 }