Skip to content

Commit 3d276cb

Browse files
committed
Support for SmartObject event handlers
1 parent a98c804 commit 3d276cb

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/Reflection/NetteObject/NetteObjectClassReflectionExtension.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public function getProperty(ClassReflection $classReflection, string $propertyNa
5555

5656
public function hasMethod(ClassReflection $classReflection, string $methodName): bool
5757
{
58-
if (!$classReflection->isSubclassOf(Object::class)) {
58+
$traitNames = $this->getTraitNames($classReflection->getNativeReflection());
59+
if (!$classReflection->isSubclassOf(Object::class) && !in_array(\Nette\SmartObject::class, $traitNames, true)) {
5960
return false;
6061
}
6162

@@ -70,4 +71,15 @@ public function getMethod(ClassReflection $classReflection, string $methodName):
7071
{
7172
return new NetteObjectEventListenerMethodReflection($methodName, $classReflection);
7273
}
74+
75+
private function getTraitNames(\ReflectionClass $class): array
76+
{
77+
$traitNames = $class->getTraitNames();
78+
while ($class->getParentClass() !== false) {
79+
$traitNames = array_values(array_unique(array_merge($traitNames, $class->getParentClass()->getTraitNames())));
80+
$class = $class->getParentClass();
81+
}
82+
83+
return $traitNames;
84+
}
7385
}

0 commit comments

Comments
 (0)