protected function processParams(&$def, DerivedClassScanner $sClass, MethodScanner $sMethod) { if (count($sMethod->getParameters()) === 0) { return; } $methodName = $sMethod->getName(); $def['parameters'][$methodName] = array(); foreach ($sMethod->getParameters(true) as $position => $p) { /** @var $p \Zend\Code\Scanner\ParameterScanner */ $actualParamName = $p->getName(); $paramName = $this->createDistinctParameterName($actualParamName, $sClass->getName()); $fqName = $sClass->getName() . '::' . $sMethod->getName() . ':' . $position; $def['parameters'][$methodName][$fqName] = array(); // set the class name, if it exists $def['parameters'][$methodName][$fqName][] = $actualParamName; $def['parameters'][$methodName][$fqName][] = ($p->getClass() !== null) ? $p->getClass() : null; $def['parameters'][$methodName][$fqName][] = !$p->isOptional(); } }
public function compileScannerInjectionMethods(DerivedClassScanner $c) { // return value $methods = array(); // name of top level class (only, not derived) $className = $c->getName(); // constructor injection $cRules = $this->getIntrospectionRuleset()->getConstructorRules(); if ($cRules['enabled']) { if ($c->hasMethod('__construct')) { $constructScanner = $c->getMethod('__construct'); if ($constructScanner->isPublic() && $constructScanner->getNumberOfParameters() > 0) { do { // explicity in included classes if ($cRules['includedClasses'] && !in_array($className, $cRules['includedClasses'])) { break; } // explicity NOT in excluded classes if ($cRules['excludedClasses'] && in_array($className, $cRules['excludedClasses'])) { break; } gettype($constructScanner); $methods['__construct'] = $this->compileScannerInjectionMethodParmeters( $constructScanner, IntrospectionRuleset::TYPE_CONSTRUCTOR ); } while (false); } } } // setter injection $sRules = $this->getIntrospectionRuleset()->getSetterRules(); if ($sRules['enabled']) { /* @var $m ReflectionMethod */ foreach ($c->getMethods(true) as $m) { //$declaringClassName = $m->getDeclaringClass()->getName(); if (!$m->isPublic() || $m->getNumberOfParameters() == 0) { continue; } // explicitly in the include classes if ($sRules['includedClasses'] && !in_array($className, $sRules['includedClasses'])) { continue; } // explicity NOT in excluded classes if ($sRules['excludedClasses'] && (in_array($className, $sRules['excludedClasses']) //|| in_array($declaringClassName, $sRules['excludedClasses'])) )) { continue; } // declaring class // if there is a pattern & it does not match if ($sRules['pattern'] && !preg_match('/' . $sRules['pattern'] . '/', $m->getName())) { continue; } // if there are more than methodsMaxParameters, continue if ($sRules['methodMaximumParams'] && ($m->getNumberOfParameters() > $sRules['methodMaximumParams'])) { continue; } $methods[$m->getName()] = $this->compileScannerInjectionMethodParmeters( $m, IntrospectionRuleset::TYPE_SETTER ); } } // interface injection $iRules = $this->getIntrospectionRuleset()->getInterfaceRules(); if ($iRules['enabled']) { foreach ($c->getInterfaces(true) as $i) { // explicitly in the include interfaces if ($iRules['includedInterfaces'] && !in_array($i->getName(), $iRules['includedInterfaces'])) { continue; } // explicity NOT in excluded classes if ($iRules['excludedInterfaces'] && in_array($i->getName(), $iRules['excludedInterfaces'])) { continue; } // if there is a pattern, and it does not match, continue if ($iRules['pattern'] && !preg_match('#' . preg_quote($iRules['pattern'], '#') . '#', $i->getName())) { continue; } foreach ($i->getMethods() as $m) { $methods[$m->getName()] = $this->compileScannerInjectionMethodParmeters( $m, IntrospectionRuleset::TYPE_INTERFACE ); } } } return $methods; }