From 6ed98a3a949ac99f17931e154557d9f7ee462fa9 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Wed, 1 Mar 2017 09:29:31 +1300 Subject: [PATCH] BUG Prevent obsolete class cache breaking autoload Remove hard-coded class paths --- src/Core/Manifest/ClassManifest.php | 29 +++++++------------ tests/php/Core/Manifest/ClassManifestTest.php | 4 +-- .../Manifest/NamespacedClassManifestTest.php | 4 +-- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/Core/Manifest/ClassManifest.php b/src/Core/Manifest/ClassManifest.php index 65bd67a30..0ba60b92f 100644 --- a/src/Core/Manifest/ClassManifest.php +++ b/src/Core/Manifest/ClassManifest.php @@ -206,12 +206,14 @@ class ClassManifest { $name = strtolower($name); - if (isset($this->classes[$name])) { - return $this->classes[$name]; - } elseif (isset($this->interfaces[$name])) { - return $this->interfaces[$name]; - } elseif (isset($this->traits[$name])) { - return $this->traits[$name]; + foreach ([ + $this->classes, + $this->interfaces, + $this->traits + ] as $source) { + if (isset($source[$name]) && file_exists($source[$name])) { + return $source[$name]; + } } return null; } @@ -381,15 +383,6 @@ class ClassManifest return array_shift($parts); } - /** - * Used to set up files that we want to exclude from parsing for performance reasons. - */ - protected function setDefaults() - { - $this->classes['sstemplateparser'] = FRAMEWORK_PATH.'/src/View/SSTemplateParser.php'; - $this->classes['sstemplateparseexception'] = FRAMEWORK_PATH.'/src/View/SSTemplateParseException.php'; - } - /** * Completely regenerates the manifest file. * @@ -407,12 +400,10 @@ class ClassManifest $this->$reset = array(); } - $this->setDefaults(); - $finder = new ManifestFileFinder(); $finder->setOptions(array( - 'name_regex' => '/^(_config.php|[^_].*\.php)$/', - 'ignore_files' => array('index.php', 'main.php', 'cli-script.php', 'SSTemplateParser.php'), + 'name_regex' => '/^((_config)|([^_].*))\\.php$/', + 'ignore_files' => array('index.php', 'main.php', 'cli-script.php'), 'ignore_tests' => !$this->tests, 'file_callback' => array($this, 'handleFile'), 'dir_callback' => array($this, 'handleDir') diff --git a/tests/php/Core/Manifest/ClassManifestTest.php b/tests/php/Core/Manifest/ClassManifestTest.php index 3f883a04d..9c32844d0 100644 --- a/tests/php/Core/Manifest/ClassManifestTest.php +++ b/tests/php/Core/Manifest/ClassManifestTest.php @@ -50,8 +50,6 @@ class ClassManifestTest extends SapphireTest 'classc' => "{$this->base}/module/classes/ClassC.php", 'classd' => "{$this->base}/module/classes/ClassD.php", 'classe' => "{$this->base}/module/classes/ClassE.php", - 'sstemplateparser' => FRAMEWORK_PATH."/src/View/SSTemplateParser.php", - 'sstemplateparseexception' => FRAMEWORK_PATH."/src/View/SSTemplateParseException.php" ); $this->assertEquals($expect, $this->manifest->getClasses()); } @@ -59,7 +57,7 @@ class ClassManifestTest extends SapphireTest public function testGetClassNames() { $this->assertEquals( - array('sstemplateparser', 'sstemplateparseexception', 'classa', 'classb', 'classc', 'classd', 'classe'), + ['classa', 'classb', 'classc', 'classd', 'classe'], $this->manifest->getClassNames() ); } diff --git a/tests/php/Core/Manifest/NamespacedClassManifestTest.php b/tests/php/Core/Manifest/NamespacedClassManifestTest.php index bb68c2214..5f89e5c83 100644 --- a/tests/php/Core/Manifest/NamespacedClassManifestTest.php +++ b/tests/php/Core/Manifest/NamespacedClassManifestTest.php @@ -263,8 +263,6 @@ class NamespacedClassManifestTest extends SapphireTest 'silverstripe\test\classf' => "{$this->base}/module/classes/ClassF.php", 'silverstripe\test\classg' => "{$this->base}/module/classes/ClassG.php", 'silverstripe\test\classh' => "{$this->base}/module/classes/ClassH.php", - 'sstemplateparser' => FRAMEWORK_PATH."/src/View/SSTemplateParser.php", - 'sstemplateparseexception' => FRAMEWORK_PATH."/src/View/SSTemplateParseException.php", 'silverstripe\framework\tests\classi' => "{$this->base}/module/classes/ClassI.php", ); @@ -274,7 +272,7 @@ class NamespacedClassManifestTest extends SapphireTest public function testGetClassNames() { $this->assertEquals( - array('sstemplateparser', 'sstemplateparseexception', 'silverstripe\test\classa', + array('silverstripe\test\classa', 'silverstripe\test\classb', 'silverstripe\test\classc', 'silverstripe\test\classd', 'silverstripe\test\classe', 'silverstripe\test\classf', 'silverstripe\test\classg', 'silverstripe\test\classh', 'silverstripe\framework\tests\classi'),