private function parseTokensInXmlEntityFile($path)
{
$tokens = token_get_all(file_get_contents($path));
$lastSeenNamespace = '';
$lastSeenClass = false;
for ($i = 0; $i < count($tokens); $i++) {
$token = $tokens[$i];
if ($token[0] == T_NAMESPACE) {
$peek = $i;
$lastSeenNamespace = '';
while (isset($tokens[++$peek])) {
if (';' == $tokens[$peek]) {
break;
} elseif (is_array($tokens[$peek]) && in_array($tokens[$peek][0], array(T_STRING, T_NS_SEPARATOR))) {
$lastSeenNamespace .= $tokens[$peek][1];
}
}
} else {
if ($token[0] == T_CLASS) {
$lastSeenClass = $lastSeenNamespace . '\\' . $tokens[$i + 2][1];
$this->staticReflection[$lastSeenClass]['properties'] = array();
$this->staticReflection[$lastSeenClass]['methods'] = array();
} else {
if ($token[0] == T_FUNCTION) {
if ($tokens[$i + 2][0] == T_STRING) {
$this->staticReflection[$lastSeenClass]['methods'][] = $tokens[$i + 2][1];
} else {
if ($tokens[$i + 2][0] == T_AMPERSAND && $tokens[$i + 3][0] == T_STRING) {
$this->staticReflection[$lastSeenClass]['methods'][] = $tokens[$i + 3][1];
}
}
} else {
if (in_array($token[0], array(T_VAR, T_PUBLIC, T_PRIVATE, T_PROTECTED)) && $tokens[$i + 2][0] != T_FUNCTION) {
$this->staticReflection[$lastSeenClass]['properties'][] = substr($tokens[$i + 2][1], 1);
}
}
}
}
}
}