public function analyze()
{
$gremlin = <<<GREMLIN
g.V().hasLabel("Property").out("OBJECT").not(has("code", "\$this")).in("OBJECT")
.out("PROPERTY").hasLabel("Identifier").map{ it.get().value("code"); }.unique();
GREMLIN;
$properties = $this->query($gremlin);
$this->atomIs('Ppp')->hasOut('PUBLIC')->hasNoOut('STATIC')->outIs('PPP')->_as('ppp')->isNot('propertyname', $properties)->back('ppp');
$this->prepareQuery();
$gremlin = <<<GREMLIN
g.V().hasLabel("Staticproperty").out("CLASS").has("token", within("T_STRING", "T_NS_SEPARATOR")).not(has("code", within(["self", "static"]))).sideEffect{fnp = it.get().value("fullnspath");}.in("CLASS")
.out("PROPERTY").hasLabel("Variable").map{ fnp + '::' + it.get().value("code"); }.unique();
GREMLIN;
$staticproperties = $this->query($gremlin);
if (count($staticproperties) > 0) {
$this->atomIs('Ppp')->hasOut('PUBLIC')->hasOut('STATIC')->outIs('PPP')->_as('results')->outIsIE('LEFT')->_as('ppp')->goToClass()->savePropertyAs('fullnspath', 'fnp')->back('ppp')->raw('filter{ !(fnp + "::" + it.get().value("code") in ["' . str_replace('$', '\\$', str_replace("\\", "\\\\", implode('", "', $staticproperties))) . '"] )}')->back('results');
$this->prepareQuery();
}
}