Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

Commit

Permalink
Merged from zf2/master
Browse files Browse the repository at this point in the history
  • Loading branch information
Show file tree
Hide file tree
Showing 26 changed files with 468 additions and 214 deletions.
6 changes: 6 additions & 0 deletions src/Configuration.php
Expand Up @@ -47,8 +47,10 @@ public function configureDefinition(Di $di, $definition)
switch ($definitionType) {
case 'compiler':
// @todo
break;
case 'runtime':
// @todo
break;
case 'class':
foreach ($definitionData as $className => $classData) {
$classDefinitions = $di->definitions()->getDefinitionsByType('Zend\Di\Definition\ClassDefinition');
Expand Down Expand Up @@ -135,6 +137,10 @@ public function configureInstance(Di $di, $instanceData)
case 'injection':
$im->setInjections($target, $v);
break;
case 'shared':
case 'share':
$im->setShared($target, $v);
break;
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions src/Definition/ArrayDefinition.php
Expand Up @@ -9,6 +9,10 @@ class ArrayDefinition implements Definition

public function __construct(Array $dataArray)
{
foreach ($dataArray as $class => $value) {
// force lower names
$dataArray[$class] = array_change_key_case($dataArray[$class], CASE_LOWER);
}
$this->dataArray = $dataArray;
}

Expand Down
12 changes: 6 additions & 6 deletions src/Definition/Builder/InjectionMethod.php
Expand Up @@ -20,13 +20,13 @@ public function getName()
return $this->name;
}

public function addParameter($name, $class = null, $position = self::PARAMETER_POSTION_NEXT)
public function addParameter($name, $class = null, $isRequired = null)
{
if ($position == self::PARAMETER_POSTION_NEXT) {
$this->parameters[$name] = $class;
} else {
throw new \Exception('Implementation for parameter placement is incomplete');
}
$this->parameters[] = array(
$name,
$class,
($isRequired == null) ? true : false
);
return $this;
}

Expand Down
1 change: 1 addition & 0 deletions src/Definition/Builder/PhpClass.php
Expand Up @@ -8,6 +8,7 @@ class PhpClass
protected $name = null;
protected $instantiator = '__construct';
protected $injectionMethods = array();
protected $superTypes = array();

public function setName($name)
{
Expand Down
6 changes: 5 additions & 1 deletion src/Definition/BuilderDefinition.php
Expand Up @@ -218,7 +218,11 @@ public function getMethodParameters($class, $method)
if (!$method instanceof Builder\InjectionMethod) {
throw new Exception\RuntimeException('Cannot find method object for method ' . $method . ' in this builder definition.');
}
return $method->getParameters();
$methodParameters = array();
foreach ($method->getParameters() as $name => $info) {
$methodParameters[$class->getName() . '::' . $method->getName() . ':' . $name] = $info;
}
return $methodParameters;
}


Expand Down
2 changes: 1 addition & 1 deletion src/Definition/ClassDefinition.php
Expand Up @@ -6,7 +6,7 @@ class ClassDefinition implements Definition, PartialMarker
{

protected $class = null;
protected $supertypes = null;
protected $supertypes = array();
protected $instantiator = null;
protected $methods = array();
protected $methodParameters = array();
Expand Down
32 changes: 2 additions & 30 deletions src/Definition/CompilerDefinition.php
Expand Up @@ -9,8 +9,6 @@
Zend\Di\Definition\Annotation,
Zend\Code\Annotation\AnnotationManager,
Zend\Code\Reflection,
// Zend\Code\Scanner\FileScanner,
// Zend\Code\Scanner\MethodScanner,
Zend\Code\Annotation\AnnotationCollection;

class CompilerDefinition implements Definition
Expand Down Expand Up @@ -53,7 +51,7 @@ public function addDirectory($directory)

public function addDirectoryScanner(DirectoryScanner $directoryScanner)
{
$this->directoryScanner->addScanner($directoryScanner);
$this->directoryScanner->addDirectoryScanner($directoryScanner);
}

public function addCodeScannerFile(FileScanner $fileScanner)
Expand All @@ -68,7 +66,7 @@ public function addCodeScannerFile(FileScanner $fileScanner)
public function compile()
{
/* @var $classScanner \Zend\Code\Scanner\DerivedClassScanner */
foreach ($this->directoryScanner->getClasses() as $class) {
foreach ($this->directoryScanner->getClassNames() as $class) {
$this->processClass($class);
}
}
Expand Down Expand Up @@ -202,8 +200,6 @@ protected function processParams(&$def, Reflection\ClassReflection $rClass, Refl
/** @var $p \ReflectionParameter */
$actualParamName = $p->getName();

$paramName = $this->createDistinctParameterName($actualParamName, $rClass->getName());

$fqName = $rClass->getName() . '::' . $rMethod->getName() . ':' . $p->getPosition();

$def['parameters'][$methodName][$fqName] = array();
Expand All @@ -216,30 +212,6 @@ protected function processParams(&$def, Reflection\ClassReflection $rClass, Refl

}

protected function createDistinctParameterName($paramName, $class)
{
$currentParams = array();
if ($this->classes[$class]['parameters'] === array()) {
return $paramName;
}
foreach ($this->classes as $cdata) {
foreach ($cdata['parameters'] as $mdata) {
$currentParams = array_merge($currentParams, array_keys($mdata));
}
}

if (!in_array($paramName, $currentParams)) {
return $paramName;
}

$alt = 2;
while (in_array($paramName . (string) $alt, $currentParams)) {
$alt++;
}

return $paramName . (string) $alt;
}

// public function processClass($className)
// {
// $strategy = $this->introspectionStrategy;
Expand Down
42 changes: 14 additions & 28 deletions src/Definition/RuntimeDefinition.php
Expand Up @@ -94,7 +94,7 @@ public function hasClass($class)
return (array_key_exists($class, $this->classes));
}

return class_exists($class, true);
return class_exists($class) || interface_exists($class);
}

/**
Expand Down Expand Up @@ -225,6 +225,19 @@ protected function processClass($class)
}
}

$rTarget = $rClass;
$supertypes = array();
do {
$supertypes = array_merge($supertypes, $rTarget->getInterfaceNames());
if (!($rTargetParent = $rTarget->getParentClass())) {
break;
}
$supertypes[] = $rTargetParent->getName();
$rTarget = $rTargetParent;
} while (true);

$def['supertypes'] = $supertypes;

if ($def['instantiator'] == null) {
if ($rClass->isInstantiable()) {
$def['instantiator'] = '__construct';
Expand Down Expand Up @@ -318,8 +331,6 @@ protected function processParams(&$def, Reflection\ClassReflection $rClass, Refl
/** @var $p \ReflectionParameter */
$actualParamName = $p->getName();

$paramName = $this->createDistinctParameterName($actualParamName, $rClass->getName());

$fqName = $rClass->getName() . '::' . $rMethod->getName() . ':' . $p->getPosition();

$def['parameters'][$methodName][$fqName] = array();
Expand All @@ -331,29 +342,4 @@ protected function processParams(&$def, Reflection\ClassReflection $rClass, Refl
}

}

protected function createDistinctParameterName($paramName, $class)
{
$currentParams = array();
if ($this->classes[$class]['parameters'] === array()) {
return $paramName;
}
foreach ($this->classes as $cdata) {
foreach ($cdata['parameters'] as $mdata) {
$currentParams = array_merge($currentParams, array_keys($mdata));
}
}

if (!in_array($paramName, $currentParams)) {
return $paramName;
}

$alt = 2;
while (in_array($paramName . (string) $alt, $currentParams)) {
$alt++;
}

return $paramName . (string) $alt;
}

}
6 changes: 3 additions & 3 deletions src/DefinitionList.php
Expand Up @@ -95,13 +95,13 @@ public function hasClass($class)

public function getClassSupertypes($class)
{
$superTypes = array();
$supertypes = array();
/** @var $definition Definition\Definition */
foreach ($this as $definition) {
$superTypes = array_merge($definition->getClassSupertypes($class), $superTypes);
$supertypes = array_merge($supertypes, $definition->getClassSupertypes($class));
}
// @todo remove duplicates?
return $superTypes;
return $supertypes;
}

public function getInstantiator($class)
Expand Down

0 comments on commit 785b23e

Please sign in to comment.