From f1e4e81bbd9e12ca2ce0375f53eee3e134121d7a Mon Sep 17 00:00:00 2001 From: David Grudl Date: Fri, 23 Dec 2016 00:30:42 +0100 Subject: [PATCH 1/2] Wildcard character ? in service definitions is deprecated (BC break) --- src/DI/ContainerBuilder.php | 1 + tests/DI/ContainerBuilder.basic.phpt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DI/ContainerBuilder.php b/src/DI/ContainerBuilder.php index 0ccdee818..add364d1e 100644 --- a/src/DI/ContainerBuilder.php +++ b/src/DI/ContainerBuilder.php @@ -558,6 +558,7 @@ public function completeStatement(Statement $statement): Statement $arguments = $statement->arguments; if (is_string($entity) && Strings::contains($entity, '?')) { // PHP literal + trigger_error("Wildcard '?' used in '$entity' is deprecated.", E_USER_DEPRECATED); } elseif ($service = $this->getServiceName($entity)) { // factory calling $params = []; diff --git a/tests/DI/ContainerBuilder.basic.phpt b/tests/DI/ContainerBuilder.basic.phpt index 45b59ce96..f13f32eb0 100644 --- a/tests/DI/ContainerBuilder.basic.phpt +++ b/tests/DI/ContainerBuilder.basic.phpt @@ -61,7 +61,7 @@ $six = $builder->addDefinition('six') $builder->addDefinition('seven') ->setFactory([$six, 'create'], ['@container', $six]) ->addSetup([$six, 'methodA']) - ->addSetup('$service->methodA(?)', ['a']); + ->addSetup('@self::methodA', ['a']); $container = createContainer($builder); From f0d23121ce4c85c38b28349e74e694a929eab4b9 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Fri, 23 Dec 2016 00:31:46 +0100 Subject: [PATCH 2/2] Removed support for wildcard character ? in service definitions (BC break) --- src/DI/ContainerBuilder.php | 7 ++----- src/DI/PhpGenerator.php | 6 +----- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/DI/ContainerBuilder.php b/src/DI/ContainerBuilder.php index add364d1e..0e9a16354 100644 --- a/src/DI/ContainerBuilder.php +++ b/src/DI/ContainerBuilder.php @@ -557,10 +557,7 @@ public function completeStatement(Statement $statement): Statement $entity = $this->normalizeEntity($statement->getEntity()); $arguments = $statement->arguments; - if (is_string($entity) && Strings::contains($entity, '?')) { // PHP literal - trigger_error("Wildcard '?' used in '$entity' is deprecated.", E_USER_DEPRECATED); - - } elseif ($service = $this->getServiceName($entity)) { // factory calling + if ($service = $this->getServiceName($entity)) { // factory calling $params = []; foreach ($this->definitions[$service]->parameters as $k => $v) { $params[] = preg_replace('#\w+\z#', '\$$0', (is_int($k) ? $v : $k)) . (is_int($k) ? '' : ' = ' . PhpHelpers::dump($v)); @@ -678,7 +675,7 @@ public static function literal(string $code, array $args = null): Nette\PhpGener /** @internal */ public function normalizeEntity($entity) { - if (is_string($entity) && Strings::contains($entity, '::') && !Strings::contains($entity, '?')) { // Class::method -> [Class, method] + if (is_string($entity) && Strings::contains($entity, '::')) { // Class::method -> [Class, method] $entity = explode('::', $entity); } diff --git a/src/DI/PhpGenerator.php b/src/DI/PhpGenerator.php index d4b29f935..a83cab306 100644 --- a/src/DI/PhpGenerator.php +++ b/src/DI/PhpGenerator.php @@ -13,7 +13,6 @@ use Nette\PhpGenerator\Helpers as PhpHelpers; use Nette\PhpGenerator\PhpLiteral; use Nette\Utils\Reflection; -use Nette\Utils\Strings; /** @@ -168,10 +167,7 @@ private function formatStatement(Statement $statement): string $entity = $statement->getEntity(); $arguments = $statement->arguments; - if (is_string($entity) && Strings::contains($entity, '?')) { // PHP literal - return $this->formatPhp($entity, $arguments); - - } elseif ($service = $this->builder->getServiceName($entity)) { // factory calling + if ($service = $this->builder->getServiceName($entity)) { // factory calling return $this->formatPhp('$this->?(...?)', [Container::getMethodName($service), $arguments]); } elseif ($entity === 'not') { // operator