private function getDynamismForTokens(array $sideTokens)
{
$dynamism = $this->getTokenDynamism();
$sideTokens = array_values(array_filter($sideTokens, function (array $token) {
return !in_array($token['code'], [T_WHITESPACE, T_COMMENT, T_DOC_COMMENT, T_NS_SEPARATOR, T_PLUS, T_MINUS], true);
}));
if (count($sideTokens) > 0) {
if ($sideTokens[0]['code'] === T_VARIABLE) {
// expression starts with a variable - wins over everything else
return self::DYNAMISM_VARIABLE;
} elseif ($sideTokens[count($sideTokens) - 1]['code'] === T_CLOSE_PARENTHESIS) {
// function or method call
return self::DYNAMISM_FUNCTION_CALL;
} elseif (count($sideTokens) === 1 && $sideTokens[0]['code'] === T_STRING) {
// constant
return self::DYNAMISM_CONSTANT;
}
}
if (count($sideTokens) > 2) {
if ($sideTokens[count($sideTokens) - 2]['code'] === T_DOUBLE_COLON) {
if ($sideTokens[count($sideTokens) - 1]['code'] === T_VARIABLE) {
// static property access
return self::DYNAMISM_VARIABLE;
} elseif ($sideTokens[count($sideTokens) - 1]['code'] === T_STRING) {
// class constant
return self::DYNAMISM_CONSTANT;
}
}
}
if (isset($sideTokens[0]) && isset($dynamism[$sideTokens[0]['code']])) {
return $dynamism[$sideTokens[0]['code']];
}
return null;
}