Zephir\CompilerFile::checkDependencies PHP Method

checkDependencies() public method

Check dependencies
public checkDependencies ( Compiler $compiler )
$compiler Compiler
    public function checkDependencies(Compiler $compiler)
    {
        $classDefinition = $this->_classDefinition;
        $extendedClass = $classDefinition->getExtendsClass();
        if ($extendedClass) {
            if ($classDefinition->getType() == 'class') {
                if ($compiler->isClass($extendedClass)) {
                    $extendedDefinition = $compiler->getClassDefinition($extendedClass);
                    $classDefinition->setExtendsClassDefinition($extendedDefinition);
                } else {
                    if ($compiler->isBundledClass($extendedClass)) {
                        $extendedDefinition = $compiler->getInternalClassDefinition($extendedClass);
                        $classDefinition->setExtendsClassDefinition($extendedDefinition);
                    } else {
                        $extendedDefinition = new ClassDefinitionRuntime($extendedClass);
                        $classDefinition->setExtendsClassDefinition($extendedDefinition);
                        $this->_logger->warning('Cannot locate class "' . $extendedClass . '" when extending class "' . $classDefinition->getCompleteName() . '"', 'nonexistent-class', $this->_originalNode);
                    }
                }
            } else {
                if ($compiler->isInterface($extendedClass)) {
                    $extendedDefinition = $compiler->getClassDefinition($extendedClass);
                    $classDefinition->setExtendsClassDefinition($extendedDefinition);
                } else {
                    if ($compiler->isBundledInterface($extendedClass)) {
                        $extendedDefinition = $compiler->getInternalClassDefinition($extendedClass);
                        $classDefinition->setExtendsClassDefinition($extendedDefinition);
                    } else {
                        $extendedDefinition = new ClassDefinitionRuntime($extendedClass);
                        $classDefinition->setExtendsClassDefinition($extendedDefinition);
                        $this->_logger->warning('Cannot locate class "' . $extendedClass . '" when extending interface "' . $classDefinition->getCompleteName() . '"', 'nonexistent-class', $this->_originalNode);
                    }
                }
            }
        }
        $implementedInterfaces = $classDefinition->getImplementedInterfaces();
        if ($implementedInterfaces) {
            $interfaceDefinitions = array();
            foreach ($implementedInterfaces as $interface) {
                if ($compiler->isInterface($interface)) {
                    $interfaceDefinitions[$interface] = $compiler->getClassDefinition($interface);
                } else {
                    if ($compiler->isBundledInterface($interface)) {
                        $interfaceDefinitions[$interface] = $compiler->getInternalClassDefinition($interface);
                    } else {
                        $extendedDefinition = new ClassDefinitionRuntime($extendedClass);
                        $classDefinition->setExtendsClassDefinition($extendedDefinition);
                        $this->_logger->warning('Cannot locate class "' . $interface . '" when extending interface "' . $classDefinition->getCompleteName() . '"', 'nonexistent-class', $this->_originalNode);
                    }
                }
            }
            if ($interfaceDefinitions) {
                $classDefinition->setImplementedInterfaceDefinitions($interfaceDefinitions);
            }
        }
    }

Usage Example

Example #1
0
 public function testExtendsClassThatDoesNotExist()
 {
     $config = new Config();
     $logger = $this->getMockBuilder('Zephir\\Logger')->disableOriginalConstructor()->getMock();
     $compiler = new Compiler($config, $logger, new Backend($config));
     $topStatement = array('name' => 'myClass', 'extends' => array(array('value' => 'doesNotExist')));
     $sUT = new sUT('myClass', 'myClass.zep', $config, $logger);
     $sUT->preCompileInterface('myNamespace', $topStatement, null);
     $logger->expects($this->once())->method('warning');
     $sUT->checkDependencies($compiler);
 }