registration: Use a static whitelist of keys that are not attributes
authorKunal Mehta <legoktm@gmail.com>
Mon, 18 May 2015 06:22:46 +0000 (23:22 -0700)
committerKunal Mehta <legoktm@gmail.com>
Mon, 18 May 2015 06:32:33 +0000 (23:32 -0700)
Rather than continuously creating an array of keys that were used, just
hardcode a list of keys that aren't attributes. This also handles keys
like "AutoloadClasses" that is handled by the registry.

Bug: T98977
Change-Id: I35088a76ff4c58db71e8c9bc139fa0ccca738e3b

includes/registration/ExtensionProcessor.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php

index 23a2993..bac020d 100644 (file)
@@ -63,6 +63,27 @@ class ExtensionProcessor implements Processor {
                'license-name',
        );
 
+       /**
+        * Things that are not 'attributes', but are not in
+        * $globalSettings or $creditsAttributes.
+        *
+        * @var array
+        */
+       protected static $notAttributes = array(
+               'callback',
+               'Hooks',
+               'namespaces',
+               'ResourceFileModulePaths',
+               'ResourceModules',
+               'ResourceModuleSkinStyles',
+               'ExtensionMessagesFiles',
+               'MessagesDirs',
+               'type',
+               'config',
+               'ParserTestFiles',
+               'AutoloadClasses',
+       );
+
        /**
         * Stuff that is going to be set to $GLOBALS
         *
@@ -102,13 +123,6 @@ class ExtensionProcessor implements Processor {
         */
        protected $attributes = array();
 
-       /**
-        * List of keys that have already been processed
-        *
-        * @var array
-        */
-       protected $processed = array();
-
        /**
         * @param string $path
         * @param array $info
@@ -125,7 +139,6 @@ class ExtensionProcessor implements Processor {
                $this->extractParserTestFiles( $dir, $info );
                if ( isset( $info['callback'] ) ) {
                        $this->callbacks[] = $info['callback'];
-                       $this->processed[] = 'callback';
                }
 
                $this->extractCredits( $path, $info );
@@ -133,11 +146,12 @@ class ExtensionProcessor implements Processor {
                        if ( in_array( $key, self::$globalSettings ) ) {
                                $this->storeToArray( "wg$key", $val, $this->globals );
                        // Ignore anything that starts with a @
-                       } elseif ( $key[0] !== '@' && !in_array( $key, $this->processed ) ) {
+                       } elseif ( $key[0] !== '@' && !in_array( $key, self::$notAttributes )
+                               && !in_array( $key, self::$creditsAttributes )
+                       ) {
                                $this->storeToArray( $key, $val, $this->attributes );
                        }
                }
-
        }
 
        public function getExtractedInfo() {
@@ -157,7 +171,6 @@ class ExtensionProcessor implements Processor {
                                        $this->globals['wgHooks'][$name][] = $callback;
                                }
                        }
-                       $this->processed[] = 'Hooks';
                }
        }
 
@@ -185,7 +198,6 @@ class ExtensionProcessor implements Processor {
                                        $this->globals['wgNamespaceContentModels'][$id] = $ns['defaultcontentmodel'];
                                }
                        }
-                       $this->processed[] = 'namespaces';
                }
        }
 
@@ -217,7 +229,6 @@ class ExtensionProcessor implements Processor {
                        $this->globals["wgExtensionMessagesFiles"] += array_map( function( $file ) use ( $dir ) {
                                return "$dir/$file";
                        }, $info['ExtensionMessagesFiles'] );
-                       $this->processed[] = 'ExtensionMessagesFiles';
                }
        }
 
@@ -235,7 +246,6 @@ class ExtensionProcessor implements Processor {
                                        $this->globals["wgMessagesDirs"][$name][] = "$dir/$file";
                                }
                        }
-                       $this->processed[] = 'MessagesDirs';
                }
        }
 
@@ -244,11 +254,9 @@ class ExtensionProcessor implements Processor {
                        'path' => $path,
                        'type' => isset( $info['type'] ) ? $info['type'] : 'other',
                );
-               $this->processed[] = 'type';
                foreach ( self::$creditsAttributes as $attr ) {
                        if ( isset( $info[$attr] ) ) {
                                $credits[$attr] = $info[$attr];
-                               $this->processed[] = $attr;
                        }
                }
 
@@ -268,7 +276,6 @@ class ExtensionProcessor implements Processor {
                                        $this->globals["wg$key"] = $val;
                                }
                        }
-                       $this->processed[] = 'config';
                }
        }
 
@@ -277,7 +284,6 @@ class ExtensionProcessor implements Processor {
                        foreach ( $info['ParserTestFiles'] as $path ) {
                                $this->globals['wgParserTestFiles'][] = "$dir/$path";
                        }
-                       $this->processed[] = 'ParserTestFiles';
                }
        }
 
index d47ffa9..9474496 100644 (file)
@@ -27,12 +27,14 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                $processor->extractInfo( $this->dir, self::$default + array(
                        '@metadata' => array( 'foobarbaz' ),
                        'AnAttribute' => array( 'omg' ),
+                       'AutoloadClasses' => array( 'FooBar' => 'includes/FooBar.php' ),
                ) );
 
                $extracted = $processor->getExtractedInfo();
                $attributes = $extracted['attributes'];
                $this->assertArrayHasKey( 'AnAttribute', $attributes );
                $this->assertArrayNotHasKey( '@metadata', $attributes );
+               $this->assertArrayNotHasKey( 'AutoloadClasses', $attributes );
        }
 
        public static function provideRegisterHooks() {