|  | @@ -0,0 +1,134 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +namespace Drupal\demo;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +use Drupal\Component\Utility\Unicode;
 | 
	
		
			
				|  |  | +use Drupal\Core\DependencyInjection\ContainerBuilder;
 | 
	
		
			
				|  |  | +use Drupal\Core\DependencyInjection\ServiceProviderInterface;
 | 
	
		
			
				|  |  | +use Symfony\Component\DependencyInjection\ContainerInterface;
 | 
	
		
			
				|  |  | +use Symfony\Component\DependencyInjection\Definition;
 | 
	
		
			
				|  |  | +use Symfony\Component\DependencyInjection\Reference;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class DemoServiceProvider implements ServiceProviderInterface {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  public function boolRow(Definition $def, $check) {
 | 
	
		
			
				|  |  | +    $method = 'is' . Unicode::ucwords($check);
 | 
	
		
			
				|  |  | +    $ret = [$check];
 | 
	
		
			
				|  |  | +    $ret[] = $def->{$method}() ? 'Yes' : 'No';
 | 
	
		
			
				|  |  | +    return $ret;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Provide a textual representation of an argument or method call parameter.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @see http://symfony.com/doc/current/service_container/optional_dependencies.html
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @param mixed $param
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @return string
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  public function formatParameter($param) {
 | 
	
		
			
				|  |  | +    if ($param instanceof Reference) {
 | 
	
		
			
				|  |  | +      $prefix = '@';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $behavior = $param->getInvalidBehavior();
 | 
	
		
			
				|  |  | +      switch ($behavior) {
 | 
	
		
			
				|  |  | +        case ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE:
 | 
	
		
			
				|  |  | +          // Default handling.
 | 
	
		
			
				|  |  | +          break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        case ContainerInterface::NULL_ON_INVALID_REFERENCE:
 | 
	
		
			
				|  |  | +          // No YAML representation.
 | 
	
		
			
				|  |  | +          $prefix .= '(Null)';
 | 
	
		
			
				|  |  | +          break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        case ContainerInterface::IGNORE_ON_INVALID_REFERENCE:
 | 
	
		
			
				|  |  | +          $prefix .= '?';
 | 
	
		
			
				|  |  | +          break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        default:
 | 
	
		
			
				|  |  | +          $prefix .= "($behavior)";
 | 
	
		
			
				|  |  | +          break;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $result = "{$prefix}{$param}";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else {
 | 
	
		
			
				|  |  | +      $result = $param;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return $result;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Registers services to the container.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @param ContainerBuilder $container
 | 
	
		
			
				|  |  | +   *   The ContainerBuilder to register services to.
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  public function register(ContainerBuilder $container) {
 | 
	
		
			
				|  |  | +    $id = 'url_generator';
 | 
	
		
			
				|  |  | +    $id = 'http_middleware.session';
 | 
	
		
			
				|  |  | +    $def = $container->getDefinition($id);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $rows = [];
 | 
	
		
			
				|  |  | +    $rows[] = ['Option', 'Value'];
 | 
	
		
			
				|  |  | +    $rows[] = [str_repeat('-', 20), str_repeat('-', 80)];
 | 
	
		
			
				|  |  | +    $rows[] = ['Service ID', $id];
 | 
	
		
			
				|  |  | +    $rows[] = ['Class', $def->getClass()];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $rows[] = ['Factory', $def->getFactory()];
 | 
	
		
			
				|  |  | +    $calls = $def->getMethodCalls();
 | 
	
		
			
				|  |  | +    $call_rows = [];
 | 
	
		
			
				|  |  | +    foreach ($calls as $call) {
 | 
	
		
			
				|  |  | +      list($method, $params) = $call;
 | 
	
		
			
				|  |  | +      $params = implode(', ', array_map([$this, 'formatParameter'], $params));
 | 
	
		
			
				|  |  | +      $call_rows[] = [NULL, "$method($params)"];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (empty($call_rows)) {
 | 
	
		
			
				|  |  | +      $call_rows[] = [NULL, '-'];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $call_rows[0][0] = 'Calls';
 | 
	
		
			
				|  |  | +    $rows = array_merge($rows, $call_rows);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $tags = $def->getTags();
 | 
	
		
			
				|  |  | +    $first = TRUE;
 | 
	
		
			
				|  |  | +    $tag_rows = [];
 | 
	
		
			
				|  |  | +    foreach ($tags as $tag => $info) {
 | 
	
		
			
				|  |  | +      if (strpos($tag, '_') === 0) {
 | 
	
		
			
				|  |  | +        continue;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      foreach ($info as $info_row) {
 | 
	
		
			
				|  |  | +        foreach ($info_row as $name => $value) {
 | 
	
		
			
				|  |  | +          $row = [NULL, $tag, $name, $value];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if ($first) {
 | 
	
		
			
				|  |  | +          $row[0] = 'Tags';
 | 
	
		
			
				|  |  | +          $first = FALSE;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        $tag_rows[] = $row;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (empty($tag_rows)) {
 | 
	
		
			
				|  |  | +      $tag_rows[] = ['Tags', '-'];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $rows = array_merge($rows, $tag_rows);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $rows[] = $this->boolRow($def, 'Public');
 | 
	
		
			
				|  |  | +    $rows[] = $this->boolRow($def, 'Synthetic');
 | 
	
		
			
				|  |  | +    $rows[] = $this->boolRow($def, 'Lazy');
 | 
	
		
			
				|  |  | +    $rows[] = $this->boolRow($def, 'Shared');
 | 
	
		
			
				|  |  | +    $rows[] = $this->boolRow($def, 'Abstract');
 | 
	
		
			
				|  |  | +    $rows[] = $this->boolRow($def, 'Autowired');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    foreach ($rows as $row) {
 | 
	
		
			
				|  |  | +      $left = $row[0];
 | 
	
		
			
				|  |  | +      $right = $row[1];
 | 
	
		
			
				|  |  | +      $three = $row[2] ?? NULL;
 | 
	
		
			
				|  |  | +      $four = $row[3] ?? NULL;
 | 
	
		
			
				|  |  | +      printf("%-20s %-20s %-20s %s\n", $left, $right, $three, $four);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    echo "\n";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 |