Skip to content

Commit 531489d

Browse files
committed
New version with improvements
1 parent 3d276cb commit 531489d

10 files changed

+241
-5
lines changed

composer.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
"prefer-stable": true,
77
"require": {
88
"php": "~7.0",
9-
"phpstan/phpstan": "dev-dev#f85ba19e37",
9+
"phpstan/phpstan": "dev-dev#8bb7f234a2",
1010
"nette/utils": "^2.3.0"
1111
},
12+
"repositories": [
13+
{
14+
"type": "vcs",
15+
"url": "[email protected]:ondrejmirtes/phpstan.git"
16+
}
17+
],
1218
"autoload": {
1319
"psr-4": {
1420
"PHPStan\\": "src/"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PHPStan\Reflection\Nette;
4+
5+
use Nette\Utils\Html;
6+
use PHPStan\Reflection\ClassReflection;
7+
use PHPStan\Reflection\MethodReflection;
8+
use PHPStan\Reflection\MethodsClassReflectionExtension;
9+
use PHPStan\Reflection\PropertiesClassReflectionExtension;
10+
use PHPStan\Reflection\PropertyReflection;
11+
12+
class HtmlClassReflectionExtension implements MethodsClassReflectionExtension, PropertiesClassReflectionExtension
13+
{
14+
15+
public function hasMethod(ClassReflection $classReflection, string $methodName): bool
16+
{
17+
return $classReflection->getName() === Html::class || $classReflection->isSubclassOf(Html::class);
18+
}
19+
20+
public function getMethod(ClassReflection $classReflection, string $methodName): MethodReflection
21+
{
22+
return new HtmlMethodReflection($methodName, $classReflection);
23+
}
24+
25+
public function hasProperty(ClassReflection $classReflection, string $propertyName): bool
26+
{
27+
return $classReflection->getName() === Html::class || $classReflection->isSubclassOf(Html::class);
28+
}
29+
30+
public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection
31+
{
32+
return new HtmlPropertyReflection($classReflection);
33+
}
34+
35+
36+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PHPStan\Reflection\Nette;
4+
5+
use Nette\Utils\Html;
6+
use PHPStan\Reflection\ClassReflection;
7+
use PHPStan\Reflection\MethodReflection;
8+
use PHPStan\Type\ObjectType;
9+
use PHPStan\Type\Type;
10+
11+
class HtmlMethodReflection implements MethodReflection
12+
{
13+
14+
/** @var string */
15+
private $name;
16+
17+
/** @var \PHPStan\Reflection\ClassReflection */
18+
private $declaringClass;
19+
20+
public function __construct(string $name, ClassReflection $declaringClass)
21+
{
22+
$this->name = $name;
23+
$this->declaringClass = $declaringClass;
24+
}
25+
26+
public function getDeclaringClass(): ClassReflection
27+
{
28+
return $this->declaringClass;
29+
}
30+
31+
public function isStatic(): bool
32+
{
33+
return false;
34+
}
35+
36+
public function getParameters(): array
37+
{
38+
return [];
39+
}
40+
41+
public function isVariadic(): bool
42+
{
43+
return true;
44+
}
45+
46+
public function isPrivate(): bool
47+
{
48+
return false;
49+
}
50+
51+
public function isPublic(): bool
52+
{
53+
return true;
54+
}
55+
56+
public function getName(): string
57+
{
58+
return $this->name;
59+
}
60+
61+
public function getReturnType(): Type
62+
{
63+
return new ObjectType(Html::class, false);
64+
}
65+
66+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PHPStan\Reflection\Nette;
4+
5+
use PHPStan\Reflection\ClassReflection;
6+
use PHPStan\Reflection\PropertyReflection;
7+
use PHPStan\Type\MixedType;
8+
use PHPStan\Type\Type;
9+
10+
class HtmlPropertyReflection implements PropertyReflection
11+
{
12+
13+
/** @var \PHPStan\Reflection\ClassReflection */
14+
private $declaringClass;
15+
16+
public function __construct(ClassReflection $declaringClass)
17+
{
18+
$this->declaringClass = $declaringClass;
19+
}
20+
21+
public function getDeclaringClass(): ClassReflection
22+
{
23+
return $this->declaringClass;
24+
}
25+
26+
public function isStatic(): bool
27+
{
28+
return false;
29+
}
30+
31+
public function isPrivate(): bool
32+
{
33+
return false;
34+
}
35+
36+
public function isPublic(): bool
37+
{
38+
return true;
39+
}
40+
41+
public function getType(): Type
42+
{
43+
return new MixedType(true);
44+
}
45+
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PHPStan\Reflection\Nette;
4+
5+
use PHPStan\Reflection\ClassReflection;
6+
use PHPStan\Reflection\PropertyReflection;
7+
use PHPStan\Type\MixedType;
8+
use PHPStan\Type\Type;
9+
10+
class NetteCrateProperty implements PropertyReflection
11+
{
12+
13+
/** @var \PHPStan\Reflection\ClassReflection */
14+
private $declaringClass;
15+
16+
public function __construct(ClassReflection $declaringClass)
17+
{
18+
$this->declaringClass = $declaringClass;
19+
}
20+
21+
public function getDeclaringClass(): ClassReflection
22+
{
23+
return $this->declaringClass;
24+
}
25+
26+
public function isStatic(): bool
27+
{
28+
return false;
29+
}
30+
31+
public function isPrivate(): bool
32+
{
33+
return false;
34+
}
35+
36+
public function isPublic(): bool
37+
{
38+
return true;
39+
}
40+
41+
public function getType(): Type
42+
{
43+
return new MixedType(true);
44+
}
45+
46+
}

src/Reflection/NetteObject/NetteObjectClassReflectionExtension.php renamed to src/Reflection/Nette/NetteObjectClassReflectionExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php declare(strict_types=1);
22

3-
namespace PHPStan\Reflection\NetteObject;
3+
namespace PHPStan\Reflection\Nette;
44

55
use Nette\Object;
66
use PHPStan\Reflection\ClassReflection;

src/Reflection/NetteObject/NetteObjectEventListenerMethodReflection.php renamed to src/Reflection/Nette/NetteObjectEventListenerMethodReflection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php declare(strict_types=1);
22

3-
namespace PHPStan\Reflection\NetteObject;
3+
namespace PHPStan\Reflection\Nette;
44

55
use PHPStan\Reflection\ClassReflection;
66
use PHPStan\Reflection\MethodReflection;

src/Reflection/NetteObject/NetteObjectPropertyReflection.php renamed to src/Reflection/Nette/NetteObjectPropertyReflection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php declare(strict_types=1);
22

3-
namespace PHPStan\Reflection\NetteObject;
3+
namespace PHPStan\Reflection\Nette;
44

55
use PHPStan\Reflection\ClassReflection;
66
use PHPStan\Reflection\PropertyReflection;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PHPStan\Reflection\Nette;
4+
5+
use PHPStan\Reflection\ClassReflection;
6+
use PHPStan\Reflection\PropertiesClassReflectionExtension;
7+
use PHPStan\Reflection\PropertyReflection;
8+
9+
class NettePropertyCratesClassReflectionExtension implements PropertiesClassReflectionExtension
10+
{
11+
12+
public function hasProperty(ClassReflection $classReflection, string $propertyName): bool
13+
{
14+
$classes = [
15+
'Nette\Application\UI\ITemplate',
16+
'Nette\Http\SessionSection',
17+
];
18+
19+
if (in_array($classReflection->getName(), $classes, true)) {
20+
return true;
21+
}
22+
23+
foreach ($classes as $class) {
24+
if ($classReflection->getNativeReflection()->isSubclassOf($class)) {
25+
return true;
26+
}
27+
}
28+
29+
return false;
30+
}
31+
32+
public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection
33+
{
34+
return new NetteCrateProperty($classReflection);
35+
}
36+
37+
}

src/Reflection/Nette/SmartObjectPropertiesClassReflectionExtension.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace PHPStan\Reflection\Nette;
44

55
use PHPStan\Reflection\ClassReflection;
6-
use PHPStan\Reflection\NetteObject\NetteObjectPropertyReflection;
76
use PHPStan\Reflection\PropertiesClassReflectionExtension;
87
use PHPStan\Reflection\PropertyReflection;
98

0 commit comments

Comments
 (0)