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
+}