protected _parseMutables ( ) : array | ||
return | array |
protected function _parseMutables()
{
$tokens = token_get_all(file_get_contents($this->getFilename()));
$inblock = false;
$inarg = false;
$curlycount = 0;
$roundcount = 0;
$blockTokens = array();
$argTokens = array();
$methods = array();
$mutable = array();
$static = false;
$staticClassCapture = true;
foreach ($tokens as $index => $token) {
if (is_array($token) && $token[0] == T_STATIC && $staticClassCapture === true) {
$static = true;
$staticClassCapture = false;
continue;
}
// get class name
if (is_array($token) && ($token[0] == T_CLASS || $token[0] == T_INTERFACE)) {
$className = $tokens[$index + 2][1];
$staticClassCapture = false;
continue;
}
// get method name
if (is_array($token) && $token[0] == T_FUNCTION) {
$methodName = $tokens[$index + 2][1];
$inarg = true;
$mutable = array('file' => $this->getFilename(), 'class' => $className, 'method' => $methodName);
continue;
}
// Get the method's parameter string
if ($inarg) {
if ($token == '(') {
$roundcount += 1;
} elseif ($token == ')') {
$roundcount -= 1;
}
if ($roundcount == 1 && $token == '(') {
continue;
} elseif ($roundcount >= 1) {
$argTokens[] = $token;
} elseif ($roundcount == 0) {
$mutable['args'] = $this->_reconstructFromTokens($argTokens);
$argTokens = array();
$inarg = false;
$inblock = true;
}
continue;
}
// Get the method's block code
if ($inblock) {
if ($token == '{') {
$curlycount += 1;
} elseif ($token == '}') {
$curlycount -= 1;
}
if ($curlycount == 1 && $token == '{') {
continue;
} elseif ($curlycount >= 1) {
if (is_array($token) && $token[0] == 370) {
continue;
}
$blockTokens[] = $token;
} elseif ($curlycount == 0 && count($blockTokens) > 0) {
$mutable['tokens'] = $blockTokens;
$methods[] = $mutable;
$mutable = array();
$blockTokens = array();
$inblock = false;
$staticClassCapture = true;
}
}
}
return $methods;
}