Skip to content

Commit f86cd70

Browse files
committed
annotations @var are no longer supported (BC break)
1 parent f080d6a commit f86cd70

8 files changed

+54
-181
lines changed

src/DI/Extensions/InjectExtension.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,19 +112,15 @@ public static function getInjectProperties(string $class): array
112112
{
113113
$res = [];
114114
foreach ((new \ReflectionClass($class))->getProperties() as $rp) {
115-
$hasAttr = $rp->getAttributes(DI\Attributes\Inject::class);
116-
if ($hasAttr || DI\Helpers::parseAnnotation($rp, 'inject') !== null) {
115+
if (
116+
$rp->getAttributes(DI\Attributes\Inject::class)
117+
|| DI\Helpers::parseAnnotation($rp, 'inject') !== null
118+
) {
117119
if (!$rp->isPublic() || $rp->isStatic() || $rp->isReadOnly()) {
118120
throw new Nette\InvalidStateException(sprintf('Property %s for injection must not be static, readonly and must be public.', Reflection::toString($rp)));
119121
}
120122

121-
$type = Nette\Utils\Type::fromReflection($rp);
122-
if (!$type && !$hasAttr && ($annotation = DI\Helpers::parseAnnotation($rp, 'var'))) {
123-
$annotation = Reflection::expandClassName($annotation, Reflection::getPropertyDeclaringClass($rp));
124-
$type = Nette\Utils\Type::fromString($annotation);
125-
}
126-
127-
$res[$rp->getName()] = DI\Helpers::ensureClassType($type, 'type of property ' . Reflection::toString($rp));
123+
$res[$rp->getName()] = DI\Helpers::ensureClassType(Nette\Utils\Type::fromReflection($rp), 'type of property ' . Reflection::toString($rp));
128124
}
129125
}
130126

tests/DI/Container.inject.properties.phpt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,17 @@ class Foo implements IFoo
2323

2424
class Test1
2525
{
26-
/** @inject @var stdClass */
27-
public $varA;
28-
29-
/** @var stdClass @inject */
30-
public $varB;
26+
/** @inject */
27+
public stdClass $varA;
3128
}
3229

3330
class Test2 extends Test1
3431
{
35-
/** @var stdClass @inject */
36-
public $varC;
32+
/** @inject */
33+
public stdClass $varC;
3734

38-
/** @var IFoo @inject */
39-
public $varD;
35+
/** @inject */
36+
public IFoo $varD;
4037
}
4138

4239

@@ -52,6 +49,5 @@ $container = createContainer($builder);
5249
$test = new Test2;
5350
$container->callInjects($test);
5451
Assert::type(stdClass::class, $test->varA);
55-
Assert::type(stdClass::class, $test->varB);
5652
Assert::type(stdClass::class, $test->varC);
5753
Assert::type(Foo::class, $test->varD);

tests/DI/InjectExtension.basic.phpt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ class ConcreteDependencyB extends AbstractDependency
3131

3232
class ParentClass
3333
{
34-
/** @var stdClass @inject */
35-
public $a;
34+
/** @inject */
35+
public stdClass $a;
3636

3737

3838
public function injectA()
@@ -47,11 +47,11 @@ class ParentClass
4747

4848
class Service extends ParentClass
4949
{
50-
/** @var stdClass @inject */
51-
public $c;
50+
/** @inject */
51+
public stdClass $c;
5252

53-
/** @var AbstractDependency @inject */
54-
public $e;
53+
/** @inject */
54+
public AbstractDependency $e;
5555

5656

5757
public function injectC()

tests/DI/InjectExtension.errors.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ require __DIR__ . '/../bootstrap.php';
1616

1717
class ServiceA
1818
{
19-
/** @var DateTimeImmutable @inject */
20-
public $a;
19+
/** @inject */
20+
public DateTimeImmutable $a;
2121
}
2222

2323

2424
class ServiceB
2525
{
26-
/** @var Unknown @inject */
27-
public $a;
26+
/** @inject */
27+
public Unknown $a;
2828
}
2929

3030

tests/DI/InjectExtension.getInjectProperties().php74.phpt

Lines changed: 0 additions & 39 deletions
This file was deleted.

tests/DI/InjectExtension.getInjectProperties().php80.phpt

Lines changed: 0 additions & 38 deletions
This file was deleted.

tests/DI/InjectExtension.getInjectProperties().phpt

Lines changed: 31 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6,93 +6,51 @@
66

77
declare(strict_types=1);
88

9-
namespace A
10-
{
11-
class AClass
12-
{
13-
/** @var AInjected @inject */
14-
public $varA;
9+
use Nette\DI\Attributes\Inject;
10+
use Nette\DI\Extensions\InjectExtension;
11+
use Tester\Assert;
12+
1513

16-
/** @var B\BInjected @inject */
17-
public $varB;
14+
class AClass
15+
{
16+
/** @inject */
17+
public AInjected $varA;
1818

19-
/** @var AInjected @inject */
20-
public $varC;
19+
/** @inject */
20+
public BInjected $varB;
2121

22-
/** @var AInjected */
23-
public $varD;
24-
}
22+
public $varD;
2523

26-
class AInjected
27-
{
28-
}
24+
#[Inject]
25+
public stdClass $varF;
2926
}
3027

31-
namespace A\B
28+
class BadClass
3229
{
33-
use A;
34-
35-
class BClass extends A\AClass
36-
{
37-
/** @var BInjected @inject */
38-
public $varF;
39-
}
40-
41-
class BInjected
42-
{
43-
}
30+
/** @inject */
31+
public AClass|stdClass $var;
4432
}
4533

46-
namespace C
34+
class AInjected
4735
{
48-
use A\AInjected;
49-
use A\B;
50-
use C\CInjected as CAlias;
51-
52-
class CClass
53-
{
54-
/** @var AInjected @inject */
55-
public $var1;
56-
57-
/** @var B\BInjected @inject */
58-
public $var2;
59-
60-
/** @var CAlias @inject */
61-
public $var3;
62-
63-
/** @var CInjected @inject */
64-
public $var4;
65-
}
66-
67-
class CInjected
68-
{
69-
}
7036
}
7137

72-
namespace {
73-
use Nette\DI\Extensions\InjectExtension;
74-
use Tester\Assert;
38+
class BInjected
39+
{
40+
}
7541

76-
require __DIR__ . '/../bootstrap.php';
7742

43+
require __DIR__ . '/../bootstrap.php';
7844

79-
Assert::same([
80-
'varA' => A\AInjected::class,
81-
'varB' => A\B\BInjected::class,
82-
'varC' => A\AInjected::class,
83-
], InjectExtension::getInjectProperties(A\AClass::class));
8445

85-
Assert::same([
86-
'varA' => A\AInjected::class,
87-
'varB' => A\B\BInjected::class,
88-
'varC' => A\AInjected::class,
89-
'varF' => A\B\BInjected::class,
90-
], InjectExtension::getInjectProperties(A\B\BClass::class));
46+
Assert::same([
47+
'varA' => AInjected::class,
48+
'varB' => BInjected::class,
49+
'varF' => stdClass::class,
50+
], InjectExtension::getInjectProperties(AClass::class));
9151

92-
Assert::same([
93-
'var1' => A\AInjected::class,
94-
'var2' => A\B\BInjected::class,
95-
'var3' => C\CInjected::class,
96-
'var4' => C\CInjected::class,
97-
], InjectExtension::getInjectProperties(C\CClass::class));
98-
}
52+
Assert::exception(
53+
fn() => InjectExtension::getInjectProperties(BadClass::class),
54+
Nette\InvalidStateException::class,
55+
"Type of property BadClass::\$var is expected to not be nullable/built-in/complex, 'AClass|stdClass' given.",
56+
);

tests/DI/InjectExtension.getInjectProperties().traits.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ namespace B
1919

2020
trait BTrait
2121
{
22-
/** @var AInjected @inject */
23-
public $varA;
22+
/** @inject */
23+
public AInjected $varA;
2424
}
2525
}
2626

0 commit comments

Comments
 (0)