private function lex($input, ReflectionClass $reflectionClass)
{
try {
$tokens = $this->tokenizer->tokenize($input);
} catch (TokenizerException $e) {
throw new InvalidModifierDefinitionException('Unable to tokenize the modifier.', 0, $e);
}
$tokens = array_filter($tokens, function ($pair) {
return $pair[2] !== self::TOKEN_WHITESPACE && $pair[2] !== null;
});
$tokens = array_values($tokens);
$expanded = [];
foreach ($tokens as $token) {
if ($token[2] === self::TOKEN_STRING) {
$token[0] = stripslashes(substr($token[0], 1, -1));
$expanded[] = $token;
} elseif ($token[2] === self::TOKEN_KEYWORD) {
$values = $this->processKeyword($token[0], $reflectionClass);
if (is_array($values)) {
$count = count($values) - 1;
foreach ($values as $i => $value) {
$expanded[] = [$value, $token[1], $token[2]];
if ($i !== $count) {
$expanded[] = [',', -1, self::TOKEN_SEPARATOR];
}
}
} else {
$expanded[] = [$values, $token[1], $token[2]];
}
} else {
$expanded[] = $token;
}
}
return $expanded;
}