private function stripTypeHints($tokens)
{
foreach ($tokens as $index => $token) {
if ($this->isToken($token, '{')) {
$this->currentBodyLevel++;
} elseif ($this->isToken($token, '}')) {
$this->currentBodyLevel--;
}
switch ($this->state) {
case self::STATE_READING_ARGUMENTS:
if (')' == $token) {
$this->state = self::STATE_READING_CLASS;
} elseif ($this->tokenHasType($token, T_VARIABLE)) {
$this->extractTypehints($tokens, $index, $token);
}
break;
case self::STATE_READING_FUNCTION:
if ('(' == $token) {
$this->state = self::STATE_READING_ARGUMENTS;
} elseif ($this->tokenHasType($token, T_STRING) && !$this->currentFunction) {
$this->currentFunction = $token[1];
}
break;
case self::STATE_READING_CLASS:
if ('{' == $token && $this->currentFunction) {
$this->state = self::STATE_READING_FUNCTION_BODY;
$this->currentBodyLevel = 1;
} elseif ('}' == $token && $this->currentClass) {
$this->state = self::STATE_DEFAULT;
$this->currentClass = null;
} elseif ($this->tokenHasType($token, T_STRING) && !$this->currentClass && $this->shouldExtractTokensOfClass($token[1])) {
$this->currentClass = $token[1];
} elseif ($this->tokenHasType($token, T_FUNCTION) && $this->currentClass) {
$this->state = self::STATE_READING_FUNCTION;
}
break;
case self::STATE_READING_FUNCTION_BODY:
if ('}' == $token && $this->currentBodyLevel === 0) {
$this->currentFunction = '';
$this->state = self::STATE_READING_CLASS;
}
break;
default:
if ($this->tokenHasType($token, T_CLASS)) {
$this->state = self::STATE_READING_CLASS;
}
}
}
return $tokens;
}