From 3c19e5b133b71cf9b03f96ea0d774b7ce20068d7 Mon Sep 17 00:00:00 2001 From: vrana Date: Fri, 30 Mar 2012 04:14:39 -0700 Subject: [PATCH] Avoid warning in checking config classes in setup Summary: Current code emits warning for classes with constructors with parameters. It also creates the objects which is bad if constructors do some actual work. NOTE: http://svn.php.net/viewvc/phpdoc/en/trunk/reference/reflection/reflectionclass/issubclassof.xml?r1=324630&r2=324629 Test Plan: Run setup with: - correct classes - not-existing class - class with private constructor - class not implementing the required class Reviewers: epriestley Reviewed By: epriestley CC: aran, epriestley Differential Revision: https://secure.phabricator.com/D2056 --- src/infrastructure/setup/PhabricatorSetup.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/infrastructure/setup/PhabricatorSetup.php b/src/infrastructure/setup/PhabricatorSetup.php index a740cce548..d65f4c3c11 100644 --- a/src/infrastructure/setup/PhabricatorSetup.php +++ b/src/infrastructure/setup/PhabricatorSetup.php @@ -735,12 +735,19 @@ final class PhabricatorSetup { } self::writeHeader('CONFIG CLASSES'); - foreach (PhabricatorEnv::getRequiredClasses() as $key => $class) { - if (!PhabricatorEnv::getEnvConfig($key)) { + foreach (PhabricatorEnv::getRequiredClasses() as $key => $instanceof) { + $config = PhabricatorEnv::getEnvConfig($key); + if (!$config) { self::writeNote("'$key' is not set."); } else { try { - PhabricatorEnv::newObjectFromConfig($key); + $r = new ReflectionClass($config); + if (!$r->isSubclassOf($instanceof)) { + throw new Exception( + "Config setting '$key' must be an instance of '$instanceof'."); + } elseif (!$r->isInstantiable()) { + throw new Exception("Config setting '$key' must be instantiable."); + } } catch (Exception $ex) { self::writeFailure(); self::write("Setup failure! ".$ex->getMessage());