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(); }
public function analyze() { $data = new Methods(); $functions = $data->getFunctionsArgsInterval(); $positions = array(); foreach ($functions as $function) { if ($function['args_min'] == $function['args_max']) { continue; } if ($function['args_max'] == 100) { continue; } // Only test if the last is missing. This is sufficient $positions[$function['args_max'] - 1][] = '\\' . $function['name']; } foreach ($positions as $position => $f) { $this->atomFunctionIs($f)->outIs('ARGUMENTS')->noChildWithRank('ARGUMENT', $position)->back('first'); $this->prepareQuery(); } }