public function analyze()
{
// omitted 3rd argument
$this->atomIs('Catch')->outIs('BLOCK')->atomInside('Throw')->outIs('THROW')->outIs('NEW')->outIs('ARGUMENTS')->noChildWithRank('ARGUMENT', 2)->back('first');
$this->prepareQuery();
// Throw again, but not the caught variable
$this->atomIs('Catch')->outIs('VARIABLE')->savePropertyAs('code', 'caught')->inIs('VARIABLE')->outIs('BLOCK')->atomInside('Throw')->outIs('THROW')->outIs('NEW')->outIs('ARGUMENTS')->outIs('ARGUMENT')->is('rank', 2)->notSamePropertyAs('code', 'caught')->back('first');
$this->prepareQuery();
}