public function analyze()
{
// this is for functions defined within PHP
$data = new Methods();
$functions = $data->getFunctionsArgsInterval();
$argsMins = array();
$argsMaxs = array();
foreach ($functions as $function) {
if ($function['args_min'] > 0) {
$argsMins[$function['args_min']][] = '\\' . $function['name'];
}
if ($function['args_max'] < 100) {
$argsMaxs[$function['args_max']][] = '\\' . $function['name'];
}
}
foreach ($argsMins as $nb => $f) {
$this->atomFunctionIs($f)->outIs('ARGUMENTS')->isLess('count', $nb)->back('first');
$this->prepareQuery();
}
foreach ($argsMaxs as $nb => $f) {
$this->atomFunctionIs($f)->outIs('ARGUMENTS')->isMore('count', $nb)->back('first');
$this->prepareQuery();
}
// this is for custom functions
$this->atomIs('Functioncall')->hasNoIn('METHOD')->tokenIs(array('T_STRING', 'T_NS_SEPARATOR'))->outIs('ARGUMENTS')->savePropertyAs('count', 'args_count')->inIs('ARGUMENTS')->functionDefinition()->analyzerIsNot('Functions/VariableArguments')->outIs('ARGUMENTS')->isMore('args_min', 'args_count')->back('first');
$this->prepareQuery();
$this->atomIs('Functioncall')->hasNoIn('METHOD')->tokenIs(array('T_STRING', 'T_NS_SEPARATOR'))->outIs('ARGUMENTS')->savePropertyAs('count', 'args_count')->inIs('ARGUMENTS')->functionDefinition()->analyzerIsNot('Functions/VariableArguments')->outIs('ARGUMENTS')->isLess('args_max', 'args_count')->back('first');
$this->prepareQuery();
}