public function testGroupStack() { $log = new ArrayList(); $listener = function (GroupEvent $event) use($log) { $log->add($event->getName() . ' ' . $event->getGroup()->type); }; $parser = new Parser(); $parser->getContext()->addListener(Context::EVENT_GROUP_ENTER, $listener); $parser->getContext()->addListener(Context::EVENT_GROUP_LEAVE, $listener); $parser->parse($this->getCode()); $this->assertEquals(['context.group_enter block', 'context.group_leave block', 'context.group_enter block', 'context.group_leave block', 'context.group_enter call', 'context.group_leave call', 'context.group_enter block', 'context.group_leave block', 'context.group_enter block', 'context.group_enter group', 'context.group_leave group', 'context.group_leave block'], $log->toArray()); }
public function __construct(Parser $parser, Config $config, Writer $writer) { $this->config = $config; $this->writer = $writer; $this->parser = $parser; $this->context = $parser->getContext(); $this->matcher = $parser->getMatcher(); $this->init(); }
public function onRoutineClosed(BlockEvent $event) { if ($this->parser->getContext()->getCurrentContext() == Context::CONTEXT_STRUCT) { $block = $event->getBlock(); if ($this->currentUnit === null || $block->start != $this->currentUnit->start) { $this->detectedUnit = $block->start; $this->detectedUnitType = Unit::UNIT_METHODS; $this->flushDetection($event->getToken()); } $this->dumpCurrentUnit(); } }