PHP Classes

File: vendor/phpdocumentor/type-resolver/src/FqsenResolver.php

Recommend this page to a friend!
  Classes of Renato De Oliveira Lucena   PHP Pokemon Script   vendor/phpdocumentor/type-resolver/src/FqsenResolver.php   Download  
File: vendor/phpdocumentor/type-resolver/src/FqsenResolver.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Pokemon Script
Provides an API to manage a database of Pokemons
Author: By
Last change:
Date: 6 years ago
Size: 2,242 bytes
 

Contents

Class file image Download
<?php
/**
 * This file is part of phpDocumentor.
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @copyright 2010-2015 Mike van Riel<mike@phpdoc.org>
 * @license http://www.opensource.org/licenses/mit-license.php MIT
 * @link http://phpdoc.org
 */

namespace phpDocumentor\Reflection;

use
phpDocumentor\Reflection\Types\Context;

class
FqsenResolver
{
   
/** @var string Definition of the NAMESPACE operator in PHP */
   
const OPERATOR_NAMESPACE = '\\';

    public function
resolve($fqsen, Context $context = null)
    {
        if (
$context === null) {
           
$context = new Context('');
        }

        if (
$this->isFqsen($fqsen)) {
            return new
Fqsen($fqsen);
        }

        return
$this->resolvePartialStructuralElementName($fqsen, $context);
    }

   
/**
     * Tests whether the given type is a Fully Qualified Structural Element Name.
     *
     * @param string $type
     *
     * @return bool
     */
   
private function isFqsen($type)
    {
        return
strpos($type, self::OPERATOR_NAMESPACE) === 0;
    }

   
/**
     * Resolves a partial Structural Element Name (i.e. `Reflection\DocBlock`) to its FQSEN representation
     * (i.e. `\phpDocumentor\Reflection\DocBlock`) based on the Namespace and aliases mentioned in the Context.
     *
     * @param string $type
     * @param Context $context
     *
     * @return Fqsen
     */
   
private function resolvePartialStructuralElementName($type, Context $context)
    {
       
$typeParts = explode(self::OPERATOR_NAMESPACE, $type, 2);

       
$namespaceAliases = $context->getNamespaceAliases();

       
// if the first segment is not an alias; prepend namespace name and return
       
if (!isset($namespaceAliases[$typeParts[0]])) {
           
$namespace = $context->getNamespace();
            if (
'' !== $namespace) {
               
$namespace .= self::OPERATOR_NAMESPACE;
            }

            return new
Fqsen(self::OPERATOR_NAMESPACE . $namespace . $type);
        }

       
$typeParts[0] = $namespaceAliases[$typeParts[0]];

        return new
Fqsen(self::OPERATOR_NAMESPACE . implode(self::OPERATOR_NAMESPACE, $typeParts));
    }
}