private function processKeyword($value, ReflectionClass $reflectionClass)
{
if (strcasecmp($value, 'true') === 0) {
return true;
} elseif (strcasecmp($value, 'false') === 0) {
return false;
} elseif (strcasecmp($value, 'null') === 0) {
return null;
} elseif (is_numeric($value)) {
return $value * 1;
} elseif (preg_match('#^[a-z0-9_\\\\]+::[a-z0-9_]+(\\*)?$#i', $value)) {
list($className, $const) = explode('::', $value, 2);
if ($className === 'self' || $className === 'static') {
$reflection = $reflectionClass;
} else {
$className = AnnotationsParser::expandClassName($className, $reflectionClass);
$reflection = new ReflectionClass($className);
}
$enum = [];
$constants = $reflection->getConstants();
if (strpos($const, '*') !== false) {
$prefix = rtrim($const, '*');
$prefixLength = strlen($prefix);
$count = 0;
foreach ($constants as $name => $value) {
if (substr($name, 0, $prefixLength) === $prefix) {
$enum[$value] = $value;
$count += 1;
}
}
if ($count === 0) {
throw new InvalidModifierDefinitionException("No constant matches {$reflection->name}::{$const} pattern.");
}
} else {
if (!array_key_exists($const, $constants)) {
throw new InvalidModifierDefinitionException("Constant {$reflection->name}::{$const} does not exist.");
}
$value = $reflection->getConstant($const);
$enum[$value] = $value;
}
return array_values($enum);
} else {
return $value;
}
}