Zephir\CompilerFile::_processShorcuts PHP Method

_processShorcuts() protected method

Creates the property shortcuts
protected _processShorcuts ( array $property, ClassDefinition $classDefinition )
$property array
$classDefinition ClassDefinition
    protected function _processShorcuts(array $property, ClassDefinition $classDefinition)
    {
        foreach ($property['shortcuts'] as $shortcut) {
            if (substr($property['name'], 0, 1) == '_') {
                $name = substr($property['name'], 1);
            } else {
                $name = $property['name'];
            }
            $docBlock = isset($shortcut['docblock']) ? $shortcut['docblock'] : isset($property['docblock']) ? $property['docblock'] : null;
            $returnsType = array();
            if ($docBlock) {
                $docBlockParser = new DocblockParser('/' . $docBlock . '/');
                $docBlockParsed = $docBlockParser->parse();
                if ($annotations = $docBlockParsed->getAnnotationsByType('var')) {
                    $returnsType = array_map(function ($type) {
                        return ($type = trim($type)) == 'mixed' ? 'variable' : $type;
                    }, (array) explode('|', $annotations[0]->getString()));
                }
                // Clear annotations
                $docBlockParsed->setAnnotations(array());
                $docBlock = $docBlockParsed->generate();
            }
            switch ($shortcut['name']) {
                case 'get':
                    $classDefinition->addMethod(new ClassMethod($classDefinition, array('public'), 'get' . Utils::camelize($name), null, new StatementsBlock(array(array('type' => 'return', 'expr' => array('type' => 'property-access', 'left' => array('type' => 'variable', 'value' => 'this'), 'right' => array('type' => 'variable', 'value' => $property['name']))))), $docBlock, $this->createReturnsType($returnsType), $shortcut), $shortcut);
                    break;
                case 'set':
                    $classDefinition->addMethod(new ClassMethod($classDefinition, array('public'), 'set' . Utils::camelize($name), new ClassMethodParameters(array(array('type' => 'parameter', 'name' => $name, 'const' => 0, 'data-type' => count($returnsType) == 1 ? $returnsType[0] : 'variable', 'mandatory' => 0))), new StatementsBlock(array(array('type' => 'let', 'assignments' => array(array('assign-type' => 'object-property', 'operator' => 'assign', 'variable' => 'this', 'property' => $property['name'], 'expr' => array('type' => 'variable', 'value' => $name, 'file' => $property['file'], 'line' => $property['line'], 'char' => $property['char']), 'file' => $property['file'], 'line' => $property['line'], 'char' => $property['char']))))), $docBlock, null, $shortcut), $shortcut);
                    break;
                case 'toString':
                case '__toString':
                    $classDefinition->addMethod(new ClassMethod($classDefinition, array('public'), '__toString', null, new StatementsBlock(array(array('type' => 'return', 'expr' => array('type' => 'property-access', 'left' => array('type' => 'variable', 'value' => 'this'), 'right' => array('type' => 'variable', 'value' => $property['name']))))), $docBlock, $this->createReturnsType(array('string')), $shortcut), $shortcut);
                    break;
                default:
                    throw new CompilerException("Unknown shortcut '" . $shortcut['name'] . "'", $shortcut);
            }
        }
    }