public function analyze()
{
// property used in a staticproperty \a\b::$b
$this->atomIs('Ppp')->hasOut('PRIVATE')->outIs('PPP')->_as('ppp')->outIsIE('LEFT')->savePropertyAs('code', 'property')->goToClassTrait()->hasName()->savePropertyAs('fullnspath', 'classe')->outIs('BLOCK')->raw('where( __.repeat( __.out() ).emit( hasLabel("Staticproperty") ).times(' . self::MAX_LOOPING . ')
.out("CLASS").filter{ it.get().value("token") in ["T_STRING", "T_NS_SEPARATOR", "T_STATIC" ] }.filter{ it.get().value("fullnspath") == classe }.in("CLASS")
.out("PROPERTY").filter{ it.get().value("code") == property }
.count().is(neq(0)) )')->back('ppp');
$this->prepareQuery();
// property used in a static property static::$b[] or self::$b[]
$this->atomIs(array('Class', 'Trait'))->hasName()->savePropertyAs('fullnspath', 'fnp')->outIs('BLOCK')->outIs('ELEMENT')->atomIs('Ppp')->hasOut('PRIVATE')->outIs('PPP')->outIsIE('LEFT')->_as('ppp')->savePropertyAs('code', 'x')->inIsIE('LEFT')->inIs('PPP')->inIs('ELEMENT')->atomInside('Staticproperty')->outIs('CLASS')->tokenIs(array('T_STRING', 'T_NS_SEPARATOR', 'T_STATIC'))->fullnspathIs('fnp')->inIs('CLASS')->outIs('PROPERTY')->atomIs('Array')->outIs('VARIABLE')->samePropertyAs('code', 'x')->back('ppp');
$this->prepareQuery();
// property used in a normal methodcall with $this $this->b()
$this->atomIs(array('Class', 'Trait'))->hasName()->savePropertyAs('fullnspath', 'classname')->outIs('BLOCK')->outIs('ELEMENT')->atomIs('Ppp')->hasOut('PRIVATE')->outIs('PPP')->savePropertyAs('propertyname', 'x')->_as('ppp')->inIs('PPP')->inIs('ELEMENT')->atomInside('Property')->outIs('OBJECT')->codeIs('$this')->inIs('OBJECT')->outIs('PROPERTY')->samePropertyAs('code', 'x')->back('ppp');
$this->prepareQuery();
}