X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fpsy%2Fpsysh%2Fsrc%2FCommand%2FListCommand%2FClassConstantEnumerator.php;fp=vendor%2Fpsy%2Fpsysh%2Fsrc%2FCommand%2FListCommand%2FClassConstantEnumerator.php;h=66d75d0efc8433e0f3700dda1e3b7e4f48115fc7;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hp=0000000000000000000000000000000000000000;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0;p=yaffs-website diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php new file mode 100644 index 000000000..66d75d0ef --- /dev/null +++ b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php @@ -0,0 +1,127 @@ +getOption('constants')) { + return; + } + + $noInherit = $input->getOption('no-inherit'); + $constants = $this->prepareConstants($this->getConstants($reflector, $noInherit)); + + if (empty($constants)) { + return; + } + + $ret = []; + $ret[$this->getKindLabel($reflector)] = $constants; + + return $ret; + } + + /** + * Get defined constants for the given class or object Reflector. + * + * @param \Reflector $reflector + * @param bool $noInherit Exclude inherited constants + * + * @return array + */ + protected function getConstants(\Reflector $reflector, $noInherit = false) + { + $className = $reflector->getName(); + + $constants = []; + foreach ($reflector->getConstants() as $name => $constant) { + $constReflector = new ReflectionConstant($reflector, $name); + + if ($noInherit && $constReflector->getDeclaringClass()->getName() !== $className) { + continue; + } + + $constants[$name] = $constReflector; + } + + ksort($constants, SORT_NATURAL | SORT_FLAG_CASE); + + return $constants; + } + + /** + * Prepare formatted constant array. + * + * @param array $constants + * + * @return array + */ + protected function prepareConstants(array $constants) + { + // My kingdom for a generator. + $ret = []; + + foreach ($constants as $name => $constant) { + if ($this->showItem($name)) { + $ret[$name] = [ + 'name' => $name, + 'style' => self::IS_CONSTANT, + 'value' => $this->presentRef($constant->getValue()), + ]; + } + } + + return $ret; + } + + /** + * Get a label for the particular kind of "class" represented. + * + * @param \ReflectionClass $reflector + * + * @return string + */ + protected function getKindLabel(\ReflectionClass $reflector) + { + if ($reflector->isInterface()) { + return 'Interface Constants'; + } elseif (method_exists($reflector, 'isTrait') && $reflector->isTrait()) { + return 'Trait Constants'; + } else { + return 'Class Constants'; + } + } +}