public function analyze()
{
$definitionsFunctionsList = "\"\\\\" . implode("\", \"\\\\", self::$definitionsFunctions) . "\"";
$definitionsList = "\"" . implode("\", \"", self::$definitions) . "\"";
// one or several namespaces
$this->atomIs('File')->outIs('FILE')->outIs('ELEMENT')->outIs('CODE')->raw('coalesce( __.out("ELEMENT").hasLabel("Namespace").out("BLOCK"), __.filter{ true; } )')->raw(<<<GREMLIN
where(
__
.out("ELEMENT")
.where( __.hasLabel({$definitionsList}).count().is(eq(0)) )
.where( __.hasLabel("Function").where( __.out("NAME").hasLabel("Void").count().is(eq(0))).count().is(eq(0)) )
.where( __.in("ANALYZED").has("analyzer", "Structures/NoDirectAccess").count().is(eq(0)) )
.where( __.hasLabel("Functioncall").filter{ it.get().value("fullnspath") in [{$definitionsFunctionsList}] }.count().is(eq(0)) )
.count().is(eq(0))
)
GREMLIN
)->back('first');
$this->prepareQuery();
}