public function testCreateWriter() { $class = $this->getClass(); $visitContext = new VisitContext($class); $writer = $visitContext->createWriter(); $this->assertInstanceOf('CG\\Generator\\Writer', $writer); $this->assertNotSame($writer, $visitContext->createWriter()); }
/** * {@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 startVisit(VisitContext $visitContext) { $writer = $visitContext->createWriter(); $class = $visitContext->getClass(); $class->addInterfaceName('Oro\\Component\\ConfigExpression\\ExpressionFactoryAwareInterface'); $setFactoryMethod = PhpMethod::create('setExpressionFactory'); $setFactoryMethod->addParameter(PhpParameter::create('expressionFactory')->setType('Oro\\Component\\ConfigExpression\\ExpressionFactoryInterface')); $setFactoryMethod->setBody($writer->write('$this->expressionFactory = $expressionFactory;')->getContent()); $class->setMethod($setFactoryMethod); $factoryProperty = PhpProperty::create('expressionFactory'); $factoryProperty->setVisibility(PhpProperty::VISIBILITY_PRIVATE); $class->setProperty($factoryProperty); $visitContext->getUpdateMethodWriter()->writeln('if (null === $this->expressionFactory) {')->writeln(' throw new \\RuntimeException(\'Missing expression factory for layout update\');')->writeln('}')->writeln('')->writeln(sprintf('$expr = %s;', $this->expression->compile('$this->expressionFactory')))->writeln(sprintf('$context = [\'context\' => $%s->getContext()];', LayoutUpdateGeneratorInterface::PARAM_LAYOUT_ITEM))->writeln('if ($expr->evaluate($context)) {')->indent(); }