public function analyze()
{
$classes = $this->loadIni('php_classes.ini', 'classes');
$classes = $this->makeFullNsPath($classes);
$interfaces = $this->loadIni('php_interfaces.ini', 'interfaces');
$interfaces = $this->makeFullNsPath($interfaces);
//general case
$this->atomIs('Instanceof')->outIs('CLASS')->tokenIs(array('T_STRING', 'T_NS_SEPARATOR'))->atomIsNot('Array')->codeIsNot(array('self', 'static', 'parent'))->noClassDefinition()->noInterfaceDefinition()->noTraitDefinition()->analyzerIsNot('Classes/IsExtClass')->analyzerIsNot('Interfaces/IsExtInterface')->analyzerIsNot('Composer/IsComposerNsname')->fullnspathIsNot(array_merge($classes, $interfaces))->back('first');
$this->prepareQuery();
// self and static will always work
// special case for parents
$this->atomIs('Instanceof')->outIs('CLASS')->tokenIs('T_STRING')->codeIs('parent')->goToClass()->raw('where( __.out("EXTENDS").count().is(eq(0)) )')->back('first');
$this->prepareQuery();
}