public function analyze()
{
// Valid for both statics and normal
// parent::
$this->atomIs('Function')->hasClassTrait()->outIs('BLOCK')->atomInside(array('Staticmethodcall', 'Staticconstant', 'Staticproperty'))->outIs('CLASS')->codeIs('parent')->back('first');
$this->prepareQuery();
// Case for normal methods
$this->atomIs('Function')->hasClassTrait()->hasNoOut('STATIC')->outIs('BLOCK')->atomInside('Variable')->codeIs('$this', true)->back('first');
$this->prepareQuery();
// Case for statics methods
$this->atomIs('Function')->hasClassTrait()->hasOut('STATIC')->outIs('BLOCK')->atomInside(array('Staticmethodcall', 'Staticproperty', 'Staticconstant'))->outIs('CLASS')->tokenIs(array('T_STRING', 'T_NS_SEPARATOR'))->savePropertyAs('fullnspath', 'classe')->goToClassTrait()->samePropertyAs('fullnspath', 'classe')->back('first');
$this->prepareQuery();
$this->atomIs('Function')->hasClassTrait()->hasOut('STATIC')->outIs('BLOCK')->atomInside('Staticproperty')->outIs('CLASS')->tokenIs(array('T_STRING', 'T_NS_SEPARATOR'))->savePropertyAs('fullnspath', 'classe')->goToClassTrait()->samePropertyAs('fullnspath', 'classe')->back('first');
$this->prepareQuery();
// static constant are excluded.
}