Esempio n. 1
0
 /**
  * Parses method nodes
  *
  * @param ClassBuilder $classBuilder ClassBuilder object
  * @param NodeStream   $stream       NodeStream object
  */
 protected function parseMethod(ClassBuilder $classBuilder, NodeStream $stream)
 {
     $builder = new MethodBuilder();
     $comments = array();
     $methodNodes = array(TokenParser::NODE_PUBLIC_METHOD => 'public', TokenParser::NODE_PROTECTED_METHOD => 'protected', TokenParser::NODE_PRIVATE_METHOD => 'private');
     $node = $stream->expect(array_keys($methodNodes));
     $builder->setName($node->getValue());
     $builder->setVisibility($methodNodes[$node->getType()]);
     while ($stream->is(TokenParser::NODE_ARGUMENT)) {
         $argument = array();
         $argument[] = $stream->current()->getValue();
         $stream->next();
         if ($stream->is(TokenParser::NODE_ARGUMENT_TYPE)) {
             $argument[] = $stream->current()->getValue();
             $stream->next();
         } else {
             $argument[] = 'mixed';
         }
         $builder->addArgument($argument);
     }
     if ($stream->is(TokenParser::NODE_RETURN_TYPE)) {
         $builder->setType($stream->current()->getValue());
         $stream->next();
     }
     while ($stream->is(TokenParser::NODE_METHOD_COMMENT)) {
         $comments[] = $stream->current()->getValue();
         $stream->next();
     }
     if (count($comments) > 0) {
         $builder->setComments($comments);
     }
     $classBuilder->addMethod($builder);
 }
Esempio n. 2
0
 /**
  * Compiles method definition
  *
  * @param ClassBuilder $builder
  * @param StreamWriter $writer
  */
 protected function compileMethodDefinitions(ClassBuilder $builder, StreamWriter $writer)
 {
     foreach ($builder->getMethods() as $method) {
         /* @var MethodBuilder $method */
         $writer->indent()->writeLine('/**');
         $comments = $method->getComments();
         if (count($comments)) {
             foreach ($comments as $comment) {
                 $comment = trim(ltrim($comment, '>'));
                 $writer->indent()->write(' * ')->writeLine($comment);
             }
             $writer->indent()->write(' * ')->writeLine();
         }
         $arguments = $method->getArguments();
         $argumentTypeMaxLen = 0;
         if (count($arguments)) {
             foreach ($arguments as $argument) {
                 $argumentTypeMaxLen = max($argumentTypeMaxLen, strlen($argument[1]));
             }
         }
         foreach ($arguments as $argument) {
             $writer->indent()->write(' * @param ' . sprintf('%-' . $argumentTypeMaxLen . 's', $argument[1]))->writeLine(' $' . $argument[0]);
         }
         if ($method->getType()) {
             $writer->indent()->writeLine(' *');
             $writer->indent()->writeLine(' * @return ' . $method->getType());
         }
         $writer->indent()->writeLine(' */');
         $writer->indent()->write($method->getVisibility())->write(' function ')->write($method->getName())->write('(');
         $args = array();
         foreach ($arguments as $argument) {
             $type = $this->getType($argument[1]);
             $item = '';
             if ($type['hint']) {
                 $item .= $type['name'] . ' ';
             }
             $item .= '$' . $argument[0];
             $args[] = $item;
         }
         if (count($args)) {
             $writer->write(implode(', ', $args));
         }
         $writer->writeLine(')')->indent()->writeLine('{')->indent()->indent()->writeLine()->indent()->writeLine('}')->writeLine();
     }
 }