From 8eb90721a131262f17663e50aee0032a62d0ef08 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Wed, 21 Mar 2018 14:56:57 +0100 Subject: [PATCH] added type hints --- src/DI/Compiler.php | 6 +++--- src/DI/Config/Adapters/IniAdapter.php | 2 +- src/DI/ContainerBuilder.php | 17 ++++++++--------- src/DI/DependencyChecker.php | 6 +++--- src/DI/Extensions/DecoratorExtension.php | 6 +++--- src/DI/Extensions/InjectExtension.php | 10 +++++----- src/DI/Helpers.php | 2 +- tests/bootstrap.php | 11 +++++------ 8 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/DI/Compiler.php b/src/DI/Compiler.php index 11d66c467..bcf7e5b7f 100644 --- a/src/DI/Compiler.php +++ b/src/DI/Compiler.php @@ -172,7 +172,7 @@ public function compile(): string /** @internal */ - public function processParameters() + public function processParameters(): void { $params = isset($this->config['parameters']) ? $this->config['parameters'] : []; foreach ($this->dynamicParams as $key) { @@ -185,7 +185,7 @@ public function processParameters() /** @internal */ - public function processExtensions() + public function processExtensions(): void { $this->config = Helpers::expand(array_diff_key($this->config, self::$reserved), $this->builder->parameters) + array_intersect_key($this->config, self::$reserved); @@ -222,7 +222,7 @@ public function processExtensions() /** @internal */ - public function processServices() + public function processServices(): void { foreach ($this->serviceConfigs as $config) { self::loadDefinitions($this->builder, $config); diff --git a/src/DI/Config/Adapters/IniAdapter.php b/src/DI/Config/Adapters/IniAdapter.php index 02215381f..3d57f2461 100644 --- a/src/DI/Config/Adapters/IniAdapter.php +++ b/src/DI/Config/Adapters/IniAdapter.php @@ -113,7 +113,7 @@ public function dump(array $data): string /** * Recursive builds INI list. */ - private static function build($input, &$output, $prefix): void + private static function build(array $input, &$output, string $prefix): void { foreach ($input as $key => $val) { $key = str_replace(self::KEY_SEPARATOR, self::ESCAPED_KEY_SEPARATOR, $key); diff --git a/src/DI/ContainerBuilder.php b/src/DI/ContainerBuilder.php index 1a54dda02..6513c7968 100644 --- a/src/DI/ContainerBuilder.php +++ b/src/DI/ContainerBuilder.php @@ -120,7 +120,7 @@ public function hasDefinition(string $name): bool } - public function addAlias(string $alias, string $service) + public function addAlias(string $alias, string $service): void { if (!$alias) { // builder is not ready for falsy names such as '0' throw new Nette\InvalidArgumentException(sprintf('Alias name must be a non-empty string, %s given.', gettype($alias))); @@ -352,7 +352,7 @@ public function prepareClassList(): void } - private function resolveImplement(ServiceDefinition $def, $name) + private function resolveImplement(ServiceDefinition $def, $name): void { $interface = $def->getImplement(); if (!interface_exists($interface)) { @@ -431,8 +431,7 @@ private function resolveImplement(ServiceDefinition $def, $name) } - /** @return string|null */ - private function resolveServiceType($name, array $recursive = []) + private function resolveServiceType($name, array $recursive = []): ?string { if (isset($recursive[$name])) { throw new ServiceCreationException(sprintf('Circular reference detected for services: %s.', implode(', ', array_keys($recursive)))); @@ -458,8 +457,7 @@ private function resolveServiceType($name, array $recursive = []) } - /** @return string|null */ - private function resolveEntityType($entity, array $recursive = []) + private function resolveEntityType($entity, array $recursive = []): ?string { $entity = $this->normalizeEntity($entity instanceof Statement ? $entity->getEntity() : $entity); $serviceName = current(array_slice(array_keys($recursive), -1)); @@ -468,7 +466,7 @@ private function resolveEntityType($entity, array $recursive = []) if (($service = $this->getServiceName($entity[0])) || $entity[0] instanceof Statement) { $entity[0] = $this->resolveEntityType($entity[0], $recursive); if (!$entity[0]) { - return; + return null; } elseif (isset($this->definitions[$service]) && $this->definitions[$service]->getImplement()) { // @Implement::create return $entity[1] === 'create' ? $this->resolveServiceType($service, $recursive) : null; } @@ -507,6 +505,7 @@ private function resolveEntityType($entity, array $recursive = []) } return $entity; } + return null; } @@ -620,7 +619,7 @@ public function completeStatement(Statement $statement): Statement } } - array_walk_recursive($arguments, function (&$val) { + array_walk_recursive($arguments, function (&$val): void { if ($val instanceof Statement) { $val = $this->completeStatement($val); @@ -724,7 +723,7 @@ public function getServiceName($arg): ?string * Creates a list of arguments using autowiring. * @internal */ - public function autowireArguments($class, $method, array $arguments): array + public function autowireArguments(string $class, string $method, array $arguments): array { $rc = new ReflectionClass($class); if (!$rc->hasMethod($method)) { diff --git a/src/DI/DependencyChecker.php b/src/DI/DependencyChecker.php index 951ddb5f2..3598ed2fb 100644 --- a/src/DI/DependencyChecker.php +++ b/src/DI/DependencyChecker.php @@ -91,14 +91,14 @@ public static function isExpired(int $version, array $files, array &$phpFiles, a } - private static function calculateHash(array $classes, array $functions) + private static function calculateHash(array $classes, array $functions): ?string { $hash = []; foreach ($classes as $name) { try { $class = new ReflectionClass($name); } catch (\ReflectionException $e) { - return; + return null; } $hash[] = [ $name, @@ -134,7 +134,7 @@ class_uses($name), try { $method = strpos($name, '::') ? new ReflectionMethod($name) : new \ReflectionFunction($name); } catch (\ReflectionException $e) { - return; + return null; } $class = $method instanceof ReflectionMethod ? $method->getDeclaringClass() : null; if ($class && isset($flip[$class->getName()])) { diff --git a/src/DI/Extensions/DecoratorExtension.php b/src/DI/Extensions/DecoratorExtension.php index 68527ef0e..3db4e80c5 100644 --- a/src/DI/Extensions/DecoratorExtension.php +++ b/src/DI/Extensions/DecoratorExtension.php @@ -38,7 +38,7 @@ public function beforeCompile() } - public function addSetups($type, array $setups) + public function addSetups(string $type, array $setups): void { foreach ($this->findByType($type) as $def) { foreach ($setups as $setup) { @@ -51,7 +51,7 @@ public function addSetups($type, array $setups) } - public function addTags($type, array $tags) + public function addTags(string $type, array $tags): void { $tags = Nette\Utils\Arrays::normalize($tags, true); foreach ($this->findByType($type) as $def) { @@ -60,7 +60,7 @@ public function addTags($type, array $tags) } - private function findByType($type) + private function findByType(string $type): array { return array_filter($this->getContainerBuilder()->getDefinitions(), function ($def) use ($type) { return is_a($def->getType(), $type, true) || is_a($def->getImplement(), $type, true); diff --git a/src/DI/Extensions/InjectExtension.php b/src/DI/Extensions/InjectExtension.php index 4915c31ec..c878d38cf 100644 --- a/src/DI/Extensions/InjectExtension.php +++ b/src/DI/Extensions/InjectExtension.php @@ -32,7 +32,7 @@ public function beforeCompile() } - private function updateDefinition(DI\ServiceDefinition $def) + private function updateDefinition(DI\ServiceDefinition $def): void { $class = $def->getType(); $setups = $def->getSetup(); @@ -70,7 +70,7 @@ private function updateDefinition(DI\ServiceDefinition $def) * Generates list of inject methods. * @internal */ - public static function getInjectMethods($class): array + public static function getInjectMethods(string $class): array { $res = []; foreach (get_class_methods($class) as $name) { @@ -91,7 +91,7 @@ public static function getInjectMethods($class): array * Generates list of properties with annotation @inject. * @internal */ - public static function getInjectProperties($class): array + public static function getInjectProperties(string $class): array { $res = []; foreach (get_class_vars($class) as $name => $foo) { @@ -117,7 +117,7 @@ public static function callInjects(DI\Container $container, $service): void throw new Nette\InvalidArgumentException(sprintf('Service must be object, %s given.', gettype($service))); } - foreach (self::getInjectMethods($service) as $method) { + foreach (self::getInjectMethods(get_class($service)) as $method) { $container->callMethod([$service, $method]); } @@ -129,7 +129,7 @@ public static function callInjects(DI\Container $container, $service): void /** @internal */ - private static function checkType($class, $name, $type, $container = null) + private static function checkType($class, string $name, ?string $type, $container = null): void { $propName = Reflection::toString(new \ReflectionProperty($class, $name)); if (!$type) { diff --git a/src/DI/Helpers.php b/src/DI/Helpers.php index c9dd55e1e..5ebfec8a5 100644 --- a/src/DI/Helpers.php +++ b/src/DI/Helpers.php @@ -199,7 +199,7 @@ public static function prefixServiceName($config, string $namespace) /** * Returns an annotation value. */ - public static function parseAnnotation(\Reflector $ref, $name): ?string + public static function parseAnnotation(\Reflector $ref, string $name): ?string { if (!Reflection::areCommentsAvailable()) { throw new Nette\InvalidStateException('You have to enable phpDoc comments in opcode cache.'); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index da63d6910..d6e628791 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -21,7 +21,7 @@ @mkdir(TEMP_DIR); -function test(\Closure $function) +function test(\Closure $function): void { $function(); } @@ -32,13 +32,13 @@ class Notes public static $notes = []; - public static function add($message) + public static function add($message): void { self::$notes[] = $message; } - public static function fetch() + public static function fetch(): array { $res = self::$notes; self::$notes = []; @@ -47,8 +47,7 @@ public static function fetch() } -/** @return Nette\DI\Container */ -function createContainer($source, $config = null, $params = []) +function createContainer($source, $config = null, $params = []): ?Nette\DI\Container { $class = 'Container' . md5((string) lcg_value()); if ($source instanceof Nette\DI\ContainerBuilder) { @@ -63,7 +62,7 @@ function createContainer($source, $config = null, $params = []) ->setClassName($class) ->compile(); } else { - return; + return null; } file_put_contents(TEMP_DIR . '/code.php', "