Beispiel #1
0
 /**
  * @param \PhpParser\Node\Stmt $node
  * @param \EBT\ExtensionBuilder\Domain\Model\FunctionObject $object
  * @return \EBT\ExtensionBuilder\Domain\Model\AbstractObject
  */
 protected function setFunctionProperties(\PhpParser\Node\Stmt $node, Model\FunctionObject $object)
 {
     if (property_exists($node, 'type')) {
         $object->setModifiers($node->type);
     }
     $object->setBodyStmts($node->stmts);
     $position = 0;
     $object->setStartLine($node->getAttribute('startLine'));
     $object->setEndLine($node->getAttribute('endLine'));
     $getVarTypeFromParamTag = false;
     $paramTags = array();
     if ($object->isTaggedWith('param') && is_array($object->getTagValues('param'))) {
         $paramTags = $object->getTagValues('param');
         if (count($paramTags) == count($node->params)) {
             $getVarTypeFromParamTag = true;
         }
     }
     /** @var $param \PhpParser\NodeAbstract */
     foreach ($node->params as $param) {
         $parameter = new Model\ClassObject\MethodParameter($param->name);
         $parameter->setPosition($position);
         $parameter->setStartLine($param->getAttribute('startLine'));
         $parameter->setEndLine($param->getAttribute('endLine'));
         if (!is_null($param->type)) {
             $parameter->setTypeHint(NodeConverter::getValueFromNode($param->type));
             if (!$getVarTypeFromParamTag) {
                 $parameter->setVarType(NodeConverter::getValueFromNode($param->type));
             }
         } elseif ($getVarTypeFromParamTag) {
             // if there is not type hint but a varType in the param tag,
             // we set the varType of the parameter
             $paramTag = explode(' ', $paramTags[$position]);
             if ($paramTag[0] !== '$' . $param->name) {
                 $parameter->setVarType($paramTag[0]);
                 $parameter->setTypeForParamTag($paramTag[0]);
             }
         }
         if (!is_null($param->default)) {
             $parameter->setDefaultValue($param->default);
         }
         $object->setParameter($parameter);
         $position++;
     }
     $object->updateParamTags();
     return $object;
 }
Beispiel #2
0
 /**
  *
  * @param \EBT\ExtensionBuilder\Domain\Model\DomainObject\Relation\AbstractRelation $domainProperty
  *
  * @return \EBT\ExtensionBuilder\Domain\Model\ClassObject\Method
  */
 protected function buildAddMethod($domainProperty)
 {
     $propertyName = $domainProperty->getName();
     $addMethodName = self::getMethodName($domainProperty, 'add');
     if ($this->classObject->methodExists($addMethodName)) {
         $addMethod = $this->classObject->getMethod($addMethodName);
     } else {
         $addMethod = clone $this->templateClassObject->getMethod('addChild');
         $addMethod->setName('add' . ucfirst(\EBT\ExtensionBuilder\Utility\Inflector::singularize($propertyName)));
         $this->updateMethodBody($addMethod, array('child' => \EBT\ExtensionBuilder\Utility\Inflector::singularize($propertyName), 'children' => $propertyName, 'Child' => $domainProperty->getForeignModelName()));
         $this->updateDocComment($addMethod, array('\\bchild\\b' => \EBT\ExtensionBuilder\Utility\Inflector::singularize($propertyName), '\\bchildren\\b' => $propertyName, '\\bChild\\b' => $domainProperty->getForeignModelName()));
         $addMethod->setTag('param', \EBT\ExtensionBuilder\Utility\Tools::getParamTag($domainProperty, 'add'));
         $addMethod->getParameterByPosition(0)->setName(\EBT\ExtensionBuilder\Utility\Inflector::singularize($propertyName))->setVarType($domainProperty->getForeignClassName())->setTypeHint($domainProperty->getForeignClassName());
         $addMethod->setTag('return', 'void');
         $addMethod->addModifier('public');
     }
     $addParameters = $addMethod->getParameterNames();
     if (!in_array(\EBT\ExtensionBuilder\Utility\Inflector::singularize($propertyName), $addParameters)) {
         $addParameter = new Model\ClassObject\MethodParameter(\EBT\ExtensionBuilder\Utility\Tools::getParameterName($domainProperty, 'add'));
         $addParameter->setVarType($domainProperty->getForeignClassName());
         $addMethod->setParameter($addParameter);
     }
     if (!$addMethod->hasDescription()) {
         $addMethod->setDescription('Adds a ' . $domainProperty->getForeignModelName());
     }
     return $addMethod;
 }