public function analyze()
{
//////////////////////////////////////////////////////////////////
// property + $this->property
//////////////////////////////////////////////////////////////////
$this->atomIs('Ppp')->hasNoOut('STATIC')->outIs('PPP')->_as('ppp')->savePropertyAs('propertyname', 'propertyname')->goToClass()->raw('where( __.repeat( out("EXTENDS").in("DEFINITION") ).emit().times(' . self::MAX_LOOPING . ')
.where( __.out("BLOCK").repeat( __.out()).emit(hasLabel("Property")).times(' . self::MAX_LOOPING . ')
.out("OBJECT").has("code", "\\$this").in("OBJECT")
.out("PROPERTY").has("token", "T_STRING").filter{ it.get().value("code").toLowerCase() == propertyname.toLowerCase()}
)
.count().is(neq(0)) )')->back('ppp');
$this->prepareQuery();
//////////////////////////////////////////////////////////////////
// static property : inside the self class
//////////////////////////////////////////////////////////////////
$this->atomIs('Ppp')->hasOut('STATIC')->outIs('PPP')->_as('ppp')->outIsIE('LEFT')->savePropertyAs('code', 'property')->goToClass()->raw('where( __.repeat( out("EXTENDS").in("DEFINITION") ).emit().times(' . self::MAX_LOOPING . ')
.where( __.out("BLOCK").repeat( __.out()).emit(hasLabel("Staticproperty")).times(' . self::MAX_LOOPING . ')
.out("PROPERTY").has("token", "T_VARIABLE").filter{ it.get().value("code").toLowerCase() == property.toLowerCase()}
)
.count().is(neq(0)) )')->back('ppp');
$this->prepareQuery();
// This could be also checking for fnp : it needs to be a 'family' class check.
}