/** * {@inheritdoc} */ public function generate($className, GeneratorData $data, VisitorCollection $visitorCollection = null) { $this->visitorCollection = $visitorCollection ?: new VisitorCollection(); $this->prepare($data, $this->visitorCollection); $this->validate($data); $class = PhpClass::create($className); $visitContext = new VisitContext($class); if ($data->getFilename()) { $writer = $visitContext->createWriter(); $writer->writeln('/**')->writeln(' * Filename: ' . $data->getFilename())->writeln(' */'); $class->setDocblock($writer->getContent()); } $class->addInterfaceName('Oro\\Component\\Layout\\LayoutUpdateInterface'); $method = PhpMethod::create(LayoutUpdateGeneratorInterface::UPDATE_METHOD_NAME); $manipulatorParameter = PhpParameter::create(LayoutUpdateGeneratorInterface::PARAM_LAYOUT_MANIPULATOR); $manipulatorParameter->setType('Oro\\Component\\Layout\\LayoutManipulatorInterface'); $method->addParameter($manipulatorParameter); $layoutItemParameter = PhpParameter::create(LayoutUpdateGeneratorInterface::PARAM_LAYOUT_ITEM); $layoutItemParameter->setType('Oro\\Component\\Layout\\LayoutItemInterface'); $method->addParameter($layoutItemParameter); /** @var VisitorInterface $condition */ foreach ($this->visitorCollection as $condition) { $condition->startVisit($visitContext); } $writer = $visitContext->getUpdateMethodWriter(); $writer->writeLn(trim($this->doGenerateBody($data))); /** @var VisitorInterface $condition */ foreach ($this->visitorCollection as $condition) { $condition->endVisit($visitContext); } $method->setBody($writer->getContent()); $class->setMethod($method); $strategy = new DefaultGeneratorStrategy(); return "<?php\n\n" . $strategy->generate($class); }
/** * {@inheritdoc} */ public function endVisit(VisitContext $visitContext) { $writer = $visitContext->createWriter(); $writer->writeln(sprintf('return \'%s\';', $this->elementId)); $method = PhpMethod::create('getElement'); $method->setBody($writer->getContent()); $visitContext->getClass()->setMethod($method); }
/** * {@inheritdoc} */ public function endVisit(VisitContext $visitContext) { $visitContext->getUpdateMethodWriter()->outdent()->writeln('}'); }
public function testGetUpdateMethodWriter() { $class = $this->getClass(); $visitContext = new VisitContext($class); $this->assertSame($visitContext->getUpdateMethodWriter(), $visitContext->getUpdateMethodWriter()); }