Index: core/kernel/application.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/kernel/application.php (revision 16249) +++ core/kernel/application.php (revision ) @@ -2449,26 +2449,12 @@ * @param string $real_class Real name of class as in class declaration * @param string $file Filename in what $real_class is declared * @param string $pseudo_class Name under this class object will be accessed using getObject method - * @param Array $dependecies List of classes required for this class functioning * @access public * @author Alex */ - function registerClass($real_class, $file, $pseudo_class = null, $dependecies = Array() ) + function registerClass($real_class, $file, $pseudo_class = null) { - $this->Factory->registerClass($real_class, $file, $pseudo_class, $dependecies); - } - - /** - * Add $class_name to required classes list for $depended_class class. - * All required class files are included before $depended_class file is included - * - * @param string $depended_class - * @param string $class_name - * @author Alex - */ - function registerDependency($depended_class, $class_name) - { - $this->Factory->registerDependency($depended_class, $class_name); + $this->Factory->registerClass($real_class, $file, $pseudo_class); } /** @@ -2560,7 +2546,7 @@ */ function hasObject($name) { - return isset($this->Factory->Storage[$name]); + return $this->Factory->hasObject($name); } /** @@ -3329,4 +3315,4 @@ return $this->ModuleInfo['Core']['RootCat']; } -} \ No newline at end of file +} Index: core/kernel/utility/factory.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/kernel/utility/factory.php (revision 16249) +++ core/kernel/utility/factory.php (revision ) @@ -20,9 +20,9 @@ * Where all created objects are stored * * @var Array - * @access private + * @access public */ - var $Storage=Array(); + public $Storage=Array(); /** * Map between class name and file name @@ -30,9 +30,9 @@ * File path absolute! * * @var Array - * @access private + * @access public */ - var $Files=Array(); + public $Files=Array(); /** * Map class names to their pseudo @@ -40,16 +40,38 @@ * value=real_class_name * * @var Array - * @access private + * @access public */ - var $realClasses=Array(); + public $realClasses=Array(); + + public function kFactory() + { + parent::kBase(); + + spl_autoload_register(Array(&$this, 'autoload')); + } /** - * class name vs other classnames it's require for existing + * Performs automatic loading of classes registered with the factory * - * @var Array + * @param string $class_name + * @return void + * @throws Exception + * @access public */ - var $Dependencies=Array(); + public function autoload($class_name) + { + if ( !isset($this->Files[$class_name]) ) { + // class not from our factory -> let other autoloaders handle it + return; + } + + if ( !file_exists(FULL_PATH . $this->Files[$class_name]) ) { + throw new Exception('File ' . FULL_PATH . $this->Files[$class_name] . ' containing class ' . $class_name . ' definition not found'); + } + + k4_include_once(FULL_PATH . $this->Files[$class_name]); + } /** * Splits any mixing of prefix and @@ -59,26 +81,27 @@ * @return Array * @access public */ - function processPrefix($prefix_special) + public function processPrefix($prefix_special) { // l.pick, l, m.test_TagProcessor //preg_match("/(.*)\.*(.*)(_*)(.*)/", $prefix_special, $regs); //return Array('prefix'=>$regs[1].$regs[3].$regs[4], 'special'=>$regs[2]); - $tmp=explode('_',$prefix_special,2); - $tmp[0]=explode('.',$tmp[0]); + $tmp = explode('_', $prefix_special, 2); + $tmp[0] = explode('.', $tmp[0]); - $prefix=$tmp[0][0]; - $prefix_special=$prefix; // new1 - if( isset($tmp[1]) ) - { - $prefix.='_'.$tmp[1]; + $prefix = $tmp[0][0]; + $prefix_special = $prefix; // new1 + + if ( isset($tmp[1]) ) { + $prefix .= '_' . $tmp[1]; } - $special= isset($tmp[0][1]) ? $tmp[0][1] : ''; - $prefix_special.='.'.$special; // new2 + + $special = isset($tmp[0][1]) ? $tmp[0][1] : ''; + $prefix_special .= '.' . $special; // new2 - return Array('prefix'=>$prefix,'special'=>$special,'prefix_special'=>$prefix_special); + return Array ('prefix' => $prefix, 'special' => $special, 'prefix_special' => $prefix_special); } @@ -90,8 +113,9 @@ * @param string $pseudo_class * @param Array $event_params * @return Object + * @access public */ - function &getObject($name,$pseudo_class='',$event_params=Array()) + public function &getObject($name,$pseudo_class='',$event_params=Array()) { $name=rtrim($name,'.'); if( isset($this->Storage[$name]) ) return $this->Storage[$name]; @@ -196,42 +220,24 @@ * Removes object from storage, so next time it could be created from scratch * * @param string $name Object's name in the Storage + * @return void + * @access public */ - function DestroyObject($name) + public function DestroyObject($name) { unset($this->Storage[$name]); } /** - * Includes file containing class - * definition for real class name + * Checks if object with prefix passes was already created in factory * - * @param string $real_class - * @access private + * @param string $name object pseudo_class, prefix + * @return bool + * @access public */ - function includeClassFile($real_class, $pseudo_class = null) + public function hasObject($name) { - if (class_exists($real_class)) return; - if(!isset($this->Files[$real_class])) { - trigger_error('Real Class '.$real_class.' (for pseudo class ' . $pseudo_class . ') is not registered with the Factory', E_USER_ERROR); - } - if(!file_exists(FULL_PATH.$this->Files[$real_class])) { - if ($this->Application->isDebugMode()) { - $this->Application->Debugger->appendTrace(); - } - - trigger_error('Include file for class '.$real_class.' ('.FULL_PATH.$this->Files[$real_class].') does not exists', E_USER_ERROR); - } - - if( isset( $this->Dependencies[$real_class] ) ) - { - foreach($this->Dependencies[$real_class] as $dep_class_name) - { - $this->includeClassFile($dep_class_name, $pseudo_class); - } - } - - k4_include_once(FULL_PATH.$this->Files[$real_class]); + return isset($this->Storage[$name]); } /** @@ -248,7 +254,6 @@ function &makeClass($pseudo_class) { $real_class = $this->realClasses[$pseudo_class]; - if (!class_exists($real_class)) $this->includeClassFile($real_class, $pseudo_class); $mem_before = memory_get_usage(); $time_before = getmicrotime(); @@ -282,50 +287,16 @@ * @param string $real_class Real name of class as in class declaration * @param string $file Filename in what $real_class is declared * @param string $pseudo_class Name under this class object will be accessed using getObject method - * @param Array $dependecies List of classes required for this class functioning * @access public */ - function registerClass($real_class, $file, $pseudo_class=null, $dependecies = Array() ) + public function registerClass($real_class, $file, $pseudo_class = null) { if(!isset($pseudo_class)) $pseudo_class = $real_class; if (!isset($this->Files[$real_class])) { $this->Files[$real_class] = preg_replace('/^'.preg_quote(FULL_PATH, '/').'/', '', $file, 1); } - if (isset($this->realClasses[$pseudo_class])) { - $this->registerDependency($real_class, $pseudo_class); - } - - if($dependecies) - { - if (!is_array($dependecies)) $dependecies = array($dependecies); - foreach ($dependecies as $required_class) { - $this->registerDependency($real_class, $required_class); - } - } - $this->realClasses[$pseudo_class]=$real_class; } - /** - * Add $class_name to required classes list for $depended_class class. - * All required class files are included before $depended_class file is included - * - * @param string $depended_class - * @param string $class_name - * @author Alex - */ - function registerDependency($depended_class, $class_name) - { - $dependencies =& $this->Dependencies[$depended_class]; - - $conditions = Array(); - $conditions['exists'] = is_array($dependencies) && in_array($this->realClasses[$class_name], $dependencies); - $conditions['same_class'] = $this->realClasses[$class_name] == $depended_class; - - if (!$conditions['exists'] && !$conditions['same_class']) { - $dependencies[] = $this->realClasses[$class_name]; - } - } - - } \ No newline at end of file + } Index: core/kernel/utility/unit_config_reader.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/kernel/utility/unit_config_reader.php (revision 16249) +++ core/kernel/utility/unit_config_reader.php (revision ) @@ -324,7 +324,7 @@ */ function ParseConfigs() { - // 1. process normal configs and their dependencies + // 1. process normal configs $prioritized_configs = array(); foreach ($this->configData as $prefix => $config) { if (isset($config['ConfigPriority'])) { @@ -335,20 +335,15 @@ } foreach ($this->configData as $prefix => $config) { - $this->ProcessDependencies($prefix); $this->postProcessConfig($prefix, 'AggregateConfigs', 'sub_prefix'); $clones = $this->postProcessConfig($prefix, 'Clones', 'prefix'); } - // 2. process prioritized configs and their dependencies + // 2. process prioritized configs asort($prioritized_configs); foreach ($prioritized_configs as $prefix => $priority) { $this->parseConfig($prefix); } - - foreach ($prioritized_configs as $prefix => $priority) { - $this->ProcessDependencies($prefix); - } } function AfterConfigRead($store_cache = null) @@ -372,10 +367,10 @@ if ($store_cache) { $this->_sortRewriteListeners(); - + $after_event = new kEvent('adm:OnAfterCacheRebuild'); $this->Application->HandleEvent($after_event); - + $this->CacheParsedData(); if (defined('DEBUG_MODE') && DEBUG_MODE && defined('DBG_VALIDATE_CONFIGS') && DBG_VALIDATE_CONFIGS) { @@ -384,7 +379,7 @@ if (!isset($config['TableName'])) continue; $this->ValidateConfig($prefix); } - } + } } } @@ -527,17 +522,6 @@ foreach($register_classes as $class_info) { - $require_classes = getArrayValue($class_info, 'require_classes'); - if ($require_classes) { - if (!is_array($require_classes)) { - $require_classes = array($require_classes); - } - if (!isset($config['_Dependencies'][$class_info['class']])) { - $config['_Dependencies'][$class_info['class']] = array(); - } - $config['_Dependencies'][$class_info['class']] = array_merge($config['_Dependencies'][$class_info['class']], $require_classes); - } - $this->Application->registerClass( $class_info['class'], $config['BasePath'] . DIRECTORY_SEPARATOR . $class_info['file'], @@ -776,20 +760,6 @@ return ''.var_export($value, true).' of '.gettype($value); } - function ProcessDependencies($prefix) - { - $config =& $this->configData[$prefix]; - $deps = getArrayValue($config, '_Dependencies'); - if (!$deps) return ; - - foreach ($deps as $real_class => $requires) { - foreach ($requires as $class) { - $this->Application->registerDependency($real_class, $class); - } - } - unset($config['_Dependencies']); - } - function postProcessConfig($prefix, $config_key, $dst_prefix_var) { $main_config =& $this->configData[$prefix]; @@ -1104,4 +1074,4 @@ } } -} \ No newline at end of file +}