Page MenuHomeIn-Portal Phabricator

D70.id.diff
No OneTemporary

File Metadata

Created
Fri, Jun 27, 9:06 PM

D70.id.diff

Index: branches/5.3.x/core/install/cache/class_structure.php
===================================================================
--- branches/5.3.x/core/install/cache/class_structure.php
+++ branches/5.3.x/core/install/cache/class_structure.php
@@ -5,7 +5,7 @@
* This file is automatically @generated. Use 'php tools/build_class_map.php' to rebuild it.
*/
return array(
- 'cache_format' => 1,
+ 'cache_format' => 2,
'classes' => array(
'AdminEventsHandler' => '/core/units/admin/admin_events_handler.php',
'AdminTagProcessor' => '/core/units/admin/admin_tag_processor.php',
@@ -338,4 +338,2200 @@
'kZendPDFRenderer' => '/core/units/pdf/pdf_renderer_zend.php',
'kiCacheable' => '/core/kernel/interfaces/cacheable.php',
),
+ 'class_info' => array(
+ 'AdminEventsHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'AdminTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'AjaxFormHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'ApcCacheHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kCacheHandler',
+ ),
+ ),
+ 'BackupHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'BaseSession' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'BaseSessionStorage' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBBase',
+ ),
+ ),
+ 'CacheSettings' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'CaptchaEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kEventHandler',
+ ),
+ ),
+ 'CategoriesEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'CategoriesItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'CategoriesTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'CategoryHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'CategoryItemRewrite' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'CategoryItemsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'CategoryItemsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'CategoryPermissionRebuild' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'ChangeLog' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'ChangeLogEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ChangeLogTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ColumnSet' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'ConfigSearchEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ConfigSearchTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ConfigurationEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ConfigurationItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'ConfigurationTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ConfigurationValidator' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kValidator',
+ ),
+ ),
+ 'ContentEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ContentTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'CoreUpgrades' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kUpgradeHelper',
+ ),
+ ),
+ 'CountryStateEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'CssMinifyHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'CustomDataEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'CustomFieldsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'CustomFieldsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'Debugger' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'DebuggerUtil' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'DeploymentHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'DraftEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'EditPickerHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'EmailDelivery' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'EmailLogEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'EmailLogStatus' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'EmailLogTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'EmailQueueEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'EmailQueueTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'EmailTemplate' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'EmailTemplateEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'EmailTemplateTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'FakeCacheHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kCacheHandler',
+ ),
+ ),
+ 'FavoritesEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'FckEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'FckTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'FileEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'FileHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'FileTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'FormFieldEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'FormFieldsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'FormSubmissionHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'FormSubmissionTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'FormSubmissionsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'FormsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'FormsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'GeoCodeHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'GroupTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'GroupsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'IDBConnection' => array(
+ 'type' => 2,
+ ),
+ 'ImageEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ImageHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'ImageTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ImagesItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'InPortalPrerequisites' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'InpCustomFieldsHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassDetector' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'PhpParser\\NodeVisitorAbstract',
+ ),
+ ),
+ 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassMapBuilder' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'Intechnic\\InPortal\\Core\\kernel\\utility\\ClassDiscovery\\CodeFolderFilterIterator' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'RecursiveFilterIterator',
+ ),
+ ),
+ 'ItemFilterEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ItemFilterTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'JSONHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'JsMinifyHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'Language' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'LanguageImportHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'LanguagesEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'LanguagesItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'LanguagesTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'LeftJoinOptimizer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'ListHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'LoginResult' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'MInputHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'MailboxHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'MailingList' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'MailingListEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'MailingListHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'MailingListTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'MaintenanceMode' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'MassImageResizer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'MemcacheCacheHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kCacheHandler',
+ ),
+ ),
+ 'MenuHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'MimeDecodeHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'MinifyHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'ModuleDeploymentLog' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'ModuleDeploymentLogEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ModulesEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ModulesTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'NParser' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'NParserCompiler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'POP3Helper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'PageHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'PageRevisionEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PageRevisionTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'Params' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'ParserException' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Exception',
+ ),
+ ),
+ 'PasswordHash' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'PasswordHashingMethod' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'PermissionTypeEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PermissionsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PermissionsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'PhraseTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'PhrasesEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PriorityEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PromoBlockEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PromoBlockGroupEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'PromoBlockGroupTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'PromoBlockTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'PromoBlockType' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'RatingHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'RelatedSearchEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'RelatedSearchTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'RelationshipEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'RelationshipTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ReviewsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ReviewsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ScheduledTask' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'ScheduledTaskEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SelectorsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SelectorsItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'SelectorsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'Session' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'BaseSession',
+ ),
+ ),
+ 'SessionLogEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SessionStorage' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'BaseSessionStorage',
+ ),
+ ),
+ 'SiteConfigEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kEventHandler',
+ ),
+ ),
+ 'SiteConfigHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'SiteConfigTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kTagProcessor',
+ ),
+ ),
+ 'SiteDomainEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SiteHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'SkinEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SkinHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'SpamHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'SpamReportEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SpamReportTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'StatisticsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'StatisticsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'StorageEngine' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'StylesheetsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'StylesheetsItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'SubmissionFormField' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'SubmissionLogEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SubmissionLogTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'SystemEventSubscriptionEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SystemEventSubscriptionTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'SystemLogEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'SystemLogTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'TemplateHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'TemplatesCache' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'ThemeFileEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ThemeItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'ThemesEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ThemesTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'ThesaurusEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'ThesaurusTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'TranslationSaveMode' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'TranslatorEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'TranslatorTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'UnitConfigDecorator' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'UserGroupsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'UserHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'UserProfileEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'UserProfileTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'UserType' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'UsersEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'UsersItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'UsersSyncronize' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'UsersSyncronizeManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'UsersTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'VisitsEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'VisitsList' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBList',
+ ),
+ ),
+ 'VisitsTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'XCacheCacheHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kCacheHandler',
+ ),
+ ),
+ 'XMLIterator' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Iterator',
+ ),
+ ),
+ '_BlockTag' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ '_Tag_Cache' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_Capture' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_Tag_DefineElement',
+ ),
+ ),
+ '_Tag_Comment' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_Compress' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_DefaultParam' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_DefineElement' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_If' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_IfDataExists' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_IfNot' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_Tag_If',
+ ),
+ ),
+ '_Tag_Include' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_Param' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_RenderElement' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_Tag_DefineElement',
+ ),
+ ),
+ '_Tag_RenderElements' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ '_Tag_SetParam' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => '_BlockTag',
+ ),
+ ),
+ 'clsCachedPermissions' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'clsRecursionStack' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'fckFCKHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kApplication' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kiCacheable',
+ ),
+ ),
+ 'kArray' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kBase' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kBracketsHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCCDateFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kCSSDefaults' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kCSVHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCache' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kCacheHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ ),
+ 'kCacheManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kCaptchaHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCatDBEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBEventHandler',
+ ),
+ ),
+ 'kCatDBItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBItem',
+ ),
+ ),
+ 'kCatDBItemExportHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCatDBList' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBList',
+ ),
+ ),
+ 'kCatDBTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBTagProcessor',
+ ),
+ ),
+ 'kChangesFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kChartHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kClipboardHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kColumnPickerHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCookieHasher' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kCountHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCountryStatesHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCronField' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kCronHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCurlHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kCustomFieldFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kDBBase' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kDBConnection' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'IDBConnection',
+ ),
+ ),
+ 'kDBConnectionDebug' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBConnection',
+ ),
+ ),
+ 'kDBEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kEventHandler',
+ ),
+ ),
+ 'kDBItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBBase',
+ ),
+ ),
+ 'kDBList' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kDBBase',
+ 1 => 'Iterator',
+ 2 => 'Countable',
+ ),
+ ),
+ 'kDBLoadBalancer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'IDBConnection',
+ ),
+ ),
+ 'kDBTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kTagProcessor',
+ ),
+ ),
+ 'kDateFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kEmail' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kEmailSendingHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kEmailTemplateHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kErrorHandlerStack' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHandlerStack',
+ ),
+ ),
+ 'kEvent' => array(
+ 'type' => 1,
+ 'modifiers' => 2,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kEventHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kEventManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kExceptionHandlerStack' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHandlerStack',
+ ),
+ ),
+ 'kFactory' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kFactoryException' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Exception',
+ ),
+ ),
+ 'kFilenamesHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kFilesizeFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kHTTPQuery' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Params',
+ ),
+ ),
+ 'kHandlerStack' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kHookManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kInstallToolkit' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kInstallator' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kLEFTFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kLogger' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kMainTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kTagProcessor',
+ ),
+ ),
+ 'kModulesHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kMultiLanguage' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kMultiLanguageHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kMultipleFilter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kMySQLQuery' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Iterator',
+ 1 => 'Countable',
+ 2 => 'SeekableIterator',
+ ),
+ ),
+ 'kMySQLQueryCol' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kMySQLQuery',
+ ),
+ ),
+ 'kNavigationBar' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kNoPermissionException' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kRedirectException',
+ ),
+ ),
+ 'kOpenerStack' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kOptionsFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kPDFElemFactory' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kPDFElement' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kPDFHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kPDFImage' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFElement',
+ ),
+ ),
+ 'kPDFLine' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFElement',
+ ),
+ ),
+ 'kPDFRenderer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kPDFStylesheet' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kPDFTable' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFElement',
+ ),
+ ),
+ 'kPDFTableRow' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFElement',
+ ),
+ ),
+ 'kPDFTextElement' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFElement',
+ ),
+ ),
+ 'kPasswordFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kPermCacheUpdater' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kPermissionsHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kPhraseCache' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kPictureFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kUploadFormatter',
+ ),
+ ),
+ 'kPlainUrlProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kUrlProcessor',
+ ),
+ ),
+ 'kPriorityHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kRecursiveHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kRedirectException' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Exception',
+ ),
+ ),
+ 'kRequestManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kRewriteUrlProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kUrlProcessor',
+ ),
+ ),
+ 'kScheduledTaskManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kSearchHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kSectionsHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kSerializedFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kSocket' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kSubscriptionAnalyzer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kSubscriptionItem' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kSubscriptionManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kSystemConfig' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kSystemConfigException' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Exception',
+ ),
+ ),
+ 'kTCPDFRenderer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFRenderer',
+ ),
+ ),
+ 'kTagProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kTempHandlerSubTable' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kTempHandlerTable',
+ ),
+ ),
+ 'kTempHandlerTable' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kTempHandlerTopTable' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kTempHandlerTable',
+ ),
+ ),
+ 'kTempTablesHandler' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kThemesHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kUnitConfig' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kUnitConfigCloner' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kUnitConfigReader' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'kiCacheable',
+ ),
+ ),
+ 'kUnitFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kUpgradeHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kUploadFormatter' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kFormatter',
+ ),
+ ),
+ 'kUploadHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kUploaderException' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'Exception',
+ ),
+ ),
+ 'kUrlManager' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kUrlProcessor' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kUtil' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kValidator' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kBase',
+ ),
+ ),
+ 'kXMLHelper' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kHelper',
+ ),
+ ),
+ 'kXMLNode' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ ),
+ 'kXMLNode5' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kXMLNode',
+ 1 => 'IteratorAggregate',
+ ),
+ ),
+ 'kZendPDFRenderer' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'kPDFRenderer',
+ ),
+ ),
+ 'kiCacheable' => array(
+ 'type' => 2,
+ ),
+ ),
);
Index: branches/5.3.x/core/kernel/application.php
===================================================================
--- branches/5.3.x/core/kernel/application.php
+++ branches/5.3.x/core/kernel/application.php
@@ -2275,6 +2275,19 @@
}
/**
+ * Returns sub-classes of given ancestor class.
+ *
+ * @param string $ancestor_class Ancestor class.
+ * @param boolean $concrete_only Return only non-abstract classes.
+ *
+ * @return array
+ */
+ public function getSubClasses($ancestor_class, $concrete_only = true)
+ {
+ return $this->Factory->getSubClasses($ancestor_class, $concrete_only);
+ }
+
+ /**
* Checks if application is in debug mode
*
* @param bool $check_debugger check if kApplication debugger is initialized too, not only for defined DEBUG_MODE constant
Index: branches/5.3.x/core/kernel/managers/cache_manager.php
===================================================================
--- branches/5.3.x/core/kernel/managers/cache_manager.php
+++ branches/5.3.x/core/kernel/managers/cache_manager.php
@@ -302,7 +302,7 @@
{
// maybe discover keys automatically from corresponding classes
$cache_keys = Array (
- 'Factory.Files', 'Factory.Namespaces', 'Factory.realClasses',
+ 'Factory.Files', 'Factory.ClassInfo', 'Factory.ClassTree', 'Factory.Namespaces', 'Factory.realClasses',
'ConfigReader.prefixFiles', 'ConfigCloner.clones',
'EventManager.beforeHooks', 'EventManager.afterHooks', 'EventManager.scheduledTasks', 'EventManager.buildEvents',
'Application.ReplacementTemplates', 'Application.RewriteListeners', 'Application.ModuleInfo',
Index: branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassDetector.php
===================================================================
--- branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassDetector.php
+++ branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassDetector.php
@@ -16,7 +16,10 @@
use PhpParser\Node;
+use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassLike;
+use PhpParser\Node\Stmt\Interface_;
+use PhpParser\Node\Stmt\Trait_;
use PhpParser\NodeVisitorAbstract;
defined('FULL_PATH') or die('restricted access!');
@@ -58,7 +61,54 @@
public function enterNode(Node $node)
{
if ( $node instanceof ClassLike ) {
- $this->classMapBuilder->addClass((string)$node->namespacedName);
+ $class_info = array();
+
+ if ( $node instanceof Class_ ) {
+ $class_info['type'] = \kFactory::TYPE_CLASS;
+ $class_info['modifiers'] = 0;
+
+ if ( $node->isAbstract() ) {
+ $class_info['modifiers'] |= \kFactory::MODIFIER_ABSTRACT;
+ }
+
+ if ( $node->isFinal() ) {
+ $class_info['modifiers'] |= \kFactory::MODIFIER_FINAL;
+ }
+
+ $extends = array();
+
+ if ( $node->extends ) {
+ $extends[] = (string)$node->extends;
+ }
+
+ if ( $node->implements ) {
+ foreach ( $node->implements as $interface ) {
+ $extends[] = (string)$interface;
+ }
+ }
+
+ if ( $extends ) {
+ $class_info['extends'] = $extends;
+ }
+ }
+ elseif ( $node instanceof Interface_ ) {
+ $class_info['type'] = \kFactory::TYPE_INTERFACE;
+
+ if ( $node->extends ) {
+ $extends = array();
+
+ foreach ( $node->extends as $interface ) {
+ $extends[] = (string)$interface;
+ }
+
+ $class_info['extends'] = $extends;
+ }
+ }
+ elseif ( $node instanceof Trait_ ) {
+ $class_info['type'] = \kFactory::TYPE_TRAIT;
+ }
+
+ $this->classMapBuilder->addClass((string)$node->namespacedName, $class_info);
}
}
Index: branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php
===================================================================
--- branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php
+++ branches/5.3.x/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php
@@ -25,7 +25,7 @@
class ClassMapBuilder
{
- const CACHE_FORMAT = 1;
+ const CACHE_FORMAT = 2;
const CACHE_FILE_STRUCTURE = 'class_structure.php';
@@ -53,11 +53,18 @@
protected $classToFileMap = array();
/**
- * List of classes, declared in each file (key - file, value - class list).
+ * Class information used during cache building (file > class > class_info).
*
* @var array
*/
- protected $fileToClassMap = array();
+ protected $buildingCache = array();
+
+ /**
+ * Class information (type, extends, implements, etc.).
+ *
+ * @var array
+ */
+ protected $classInfo = array();
/**
* Stores hash of each file on given path.
@@ -152,7 +159,7 @@
}
/**
- * Returns class map, that was build previously.
+ * Returns class map and class information, that was built previously.
*
* @return array
*/
@@ -160,7 +167,7 @@
{
$this->load(self::CACHE_FILE_STRUCTURE, false);
- return $this->classToFileMap;
+ return array($this->classToFileMap, $this->classInfo);
}
/**
@@ -172,8 +179,8 @@
public function build()
{
if ( !class_exists('PhpParser\Parser') ) {
- $error_msg = 'PHP Parser not found. ';
- $error_msg .= 'Make sure, that Composer dependencies were installed using "php composer.phar install --dev" command.';
+ $error_msg = 'PHP Parser not found. Make sure, that Composer dependencies were ';
+ $error_msg .= 'installed using "php composer.phar install --dev" command.';
throw new \RuntimeException($error_msg);
}
@@ -201,6 +208,7 @@
ksort($this->classToFileMap);
ksort($this->fileHashes);
+ ksort($this->classInfo);
$this->store(self::CACHE_FILE_STRUCTURE);
$this->store(self::CACHE_FILE_HASHES);
@@ -237,22 +245,25 @@
$cache = include $file_path;
- if ( $cache['cache_format'] < self::CACHE_FORMAT ) {
+ if ( $cache['cache_format'] != self::CACHE_FORMAT ) {
return;
}
if ( $filename === self::CACHE_FILE_STRUCTURE ) {
+ $class_info = $cache['class_info'];
+
if ( $for_writing ) {
foreach ( $cache['classes'] as $class => $file ) {
- if ( !isset($this->fileToClassMap[$file]) ) {
- $this->fileToClassMap[$file] = array();
+ if ( !isset($this->buildingCache[$file]) ) {
+ $this->buildingCache[$file] = array();
}
- $this->fileToClassMap[$file][] = $class;
+ $this->buildingCache[$file][$class] = $class_info[$class];
}
}
else {
$this->classToFileMap = $cache['classes'];
+ $this->classInfo = $class_info;
}
}
elseif ( $filename === self::CACHE_FILE_HASHES ) {
@@ -306,6 +317,7 @@
*/
protected function createParser()
{
+ \kUtil::setResourceLimit();
ini_set('xdebug.max_nesting_level', 3000);
$this->parser = new Parser(new Lexer());
$this->traverser = new NodeTraverser();
@@ -330,15 +342,14 @@
if ( $current_hash === $previous_hash ) {
// File wasn't change since time, when cache was built.
- if ( isset($this->fileToClassMap[$file]) ) {
- foreach ( $this->fileToClassMap[$file] as $class ) {
- $this->addClass($class);
+ if ( isset($this->buildingCache[$file]) ) {
+ foreach ( $this->buildingCache[$file] as $class => $class_info ) {
+ $this->addClass($class, $class_info);
}
}
}
else {
// Parse file, because it's content doesn't match the cache.
- $this->fileToClassMap[$file] = array();
$this->fileHashes[$file] = $current_hash;
$statements = $this->parser->parse($code);
@@ -360,6 +371,7 @@
if ( $filename === self::CACHE_FILE_STRUCTURE ) {
$cache['classes'] = $this->classToFileMap;
+ $cache['class_info'] = $this->classInfo;
}
elseif ( $filename === self::CACHE_FILE_HASHES ) {
$cache['file_hashes'] = $this->fileHashes;
@@ -422,14 +434,15 @@
/**
* Adds class to the map.
*
- * @param string $class Class.
+ * @param string $class Class.
+ * @param array $class_info Class info.
*
* @return void
*/
- public function addClass($class)
+ public function addClass($class, array $class_info)
{
+ $this->classInfo[$class] = $class_info;
$this->classToFileMap[$class] = $this->currentFile;
- $this->fileToClassMap[$this->currentFile][] = $class;
}
}
Index: branches/5.3.x/core/kernel/utility/factory.php
===================================================================
--- branches/5.3.x/core/kernel/utility/factory.php
+++ branches/5.3.x/core/kernel/utility/factory.php
@@ -18,6 +18,13 @@
class kFactory extends kBase implements kiCacheable {
+ const TYPE_CLASS = 1;
+ const TYPE_INTERFACE = 2;
+ const TYPE_TRAIT = 3;
+
+ const MODIFIER_ABSTRACT = 1;
+ const MODIFIER_FINAL = 2;
+
/**
* Mapping between class name and file name
* where class definition can be found.
@@ -29,6 +36,20 @@
protected $classMap = Array ();
/**
+ * Class information.
+ *
+ * @var array
+ */
+ protected $classInfo = array();
+
+ /**
+ * Information about class usage among other classes.
+ *
+ * @var array
+ */
+ protected $classTree = array();
+
+ /**
* The PSR-4 compliant namespace-to-folder mapping.
*
* @var array
@@ -91,11 +112,24 @@
}
foreach ( $class_map_builders as $class_map_builder ) {
- $class_map = $class_map_builder->get();
+ list($class_map, $class_info) = $class_map_builder->get();
$class_names = array_keys($class_map);
$this->classMap = array_merge($this->classMap, $class_map);
+ $this->classInfo = array_merge($this->classInfo, $class_info);
$this->realClasses = array_merge($this->realClasses, array_combine($class_names, $class_names));
+
+ foreach ( $class_info as $class => $class_data ) {
+ if ( isset($class_data['extends']) ) {
+ foreach ( $class_data['extends'] as $extends_class ) {
+ if ( !isset($this->classTree[$extends_class]) ) {
+ $this->classTree[$extends_class] = array();
+ }
+
+ $this->classTree[$extends_class][] = $class;
+ }
+ }
+ }
}
}
@@ -109,6 +143,8 @@
public function setFromCache(&$data)
{
$this->classMap = $data['Factory.Files'];
+ $this->classInfo = $data['Factory.ClassInfo'];
+ $this->classTree = $data['Factory.ClassTree'];
$this->namespaceMap = $data['Factory.Namespaces'];
$this->realClasses = $data['Factory.realClasses'];
}
@@ -191,11 +227,15 @@
public function getToCache()
{
ksort($this->classMap);
+ ksort($this->classInfo);
+ ksort($this->classTree);
ksort($this->namespaceMap);
ksort($this->realClasses);
return Array (
'Factory.Files' => $this->classMap,
+ 'Factory.ClassInfo' => $this->classInfo,
+ 'Factory.ClassTree' => $this->classTree,
'Factory.Namespaces' => $this->namespaceMap,
'Factory.realClasses' => $this->realClasses,
);
@@ -352,6 +392,65 @@
}
/**
+ * Returns sub-classes of given ancestor class.
+ *
+ * @param string $ancestor_class Ancestor class.
+ * @param boolean $concrete_only Return only non-abstract classes.
+ *
+ * @return array
+ * @throws kFactoryException When ancestor class not found.
+ */
+ public function getSubClasses($ancestor_class, $concrete_only = true)
+ {
+ if ( !isset($this->classMap[$ancestor_class]) ) {
+ throw new kFactoryException(
+ 'Class "<strong>' . $ancestor_class . '</strong>" is not registered in the Factory'
+ );
+ }
+
+ if ( !isset($this->classTree[$ancestor_class]) ) {
+ return array();
+ }
+
+ $all_sub_classes = array();
+
+ foreach ( $this->classTree[$ancestor_class] as $sub_class ) {
+ $real_sub_class = $this->realClasses[$sub_class];
+ $all_sub_classes[$real_sub_class] = $sub_class;
+ $all_sub_classes = array_merge($all_sub_classes, $this->getSubClasses($sub_class, false));
+ }
+
+ if ( $concrete_only ) {
+ $concrete_sub_classes = array();
+
+ foreach ( $all_sub_classes as $real_sub_class => $sub_class ) {
+ if ( $this->classInfo[$sub_class]['type'] == self::TYPE_CLASS
+ && !$this->classHasModifier($sub_class, self::MODIFIER_ABSTRACT)
+ ) {
+ $concrete_sub_classes[$real_sub_class] = $sub_class;
+ }
+ }
+
+ return $concrete_sub_classes;
+ }
+
+ return $all_sub_classes;
+ }
+
+ /**
+ * Determines of class has modifier.
+ *
+ * @param string $class Class.
+ * @param integer $modifier Modifier.
+ *
+ * @return boolean
+ */
+ protected function classHasModifier($class, $modifier)
+ {
+ return ($this->classInfo[$class]['modifiers'] & $modifier) == $modifier;
+ }
+
+ /**
* Registers new class in the factory
*
* @param string $real_class Real name of class as in class declaration

Event Timeline