public function analyze()
{
// interface extended in the local class
$this->atomIs('Function')->outIs('NAME')->savePropertyAs('code', 'name')->goToClass()->outIs('IMPLEMENTS')->interfaceDefinition()->outIs('BLOCK')->outIs('ELEMENT')->atomIs('Function')->outIs('NAME')->samePropertyAs('code', 'name')->back('first');
$this->prepareQuery();
// interface extended in the parent interface
$this->atomIs('Function')->outIs('NAME')->savePropertyAs('code', 'name')->goToClass()->outIs('IMPLEMENTS')->interfaceDefinition()->outIs('EXTENDS')->interfaceDefinition()->outIs('BLOCK')->outIs('ELEMENT')->atomIs('Function')->outIs('NAME')->samePropertyAs('code', 'name')->back('first');
$this->prepareQuery();
// interface defined in the parents
$this->atomIs('Function')->outIs('NAME')->savePropertyAs('code', 'name')->goToClass()->goToAllParents()->outIs('IMPLEMENTS')->interfaceDefinition()->outIs('BLOCK')->outIs('ELEMENT')->atomIs('Function')->outIs('NAME')->samePropertyAs('code', 'name')->back('first');
$this->prepareQuery();
// PHP or extension defined interface
$interfaces = $this->loadIni('php_interfaces_methods.ini', 'interface');
foreach ($interfaces as $interface => $methods) {
if (empty($methods)) {
// may be the case for Traversable : interface without methods
continue;
}
$methods = explode(',', $methods);
// interface locally implemented
$this->atomIs('Function')->outIs('NAME')->codeIs($methods)->inIs('NAME')->inIs('ELEMENT')->inIs('BLOCK')->atomIs('Class')->outIs('IMPLEMENTS')->fullnspathIs('\\' . $interface)->back('first');
$this->prepareQuery();
// interface implemented by parents
$this->atomIs('Function')->outIs('NAME')->codeIs($methods)->inIs('NAME')->inIs('ELEMENT')->inIs('BLOCK')->atomIs('Class')->goToAllParents()->outIs('IMPLEMENTS')->fullnspathIs('\\' . $interface)->back('first');
$this->prepareQuery();
}
}