|
19 | 19 | namespace ProxyManager\ProxyGenerator; |
20 | 20 |
|
21 | 21 | use ProxyManager\Exception\InvalidProxiedClassException; |
| 22 | +use ProxyManager\Generator\Util\ClassGeneratorUtils; |
22 | 23 | use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodPrefixInterceptor; |
23 | 24 | use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodSuffixInterceptor; |
24 | 25 | use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodPrefixInterceptors; |
|
32 | 33 | use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicUnset; |
33 | 34 | use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter; |
34 | 35 | use ReflectionClass; |
| 36 | +use ReflectionMethod; |
35 | 37 | use Zend\Code\Generator\ClassGenerator; |
| 38 | +use Zend\Code\Generator\MethodGenerator; |
36 | 39 | use Zend\Code\Reflection\MethodReflection; |
37 | 40 |
|
38 | 41 | /** |
@@ -60,43 +63,36 @@ public function generate(ReflectionClass $originalClass, ClassGenerator $classGe |
60 | 63 | $classGenerator->addPropertyFromGenerator($prefixInterceptors = new MethodPrefixInterceptors()); |
61 | 64 | $classGenerator->addPropertyFromGenerator($suffixInterceptors = new MethodPrefixInterceptors()); |
62 | 65 |
|
63 | | - $methods = ProxiedMethodsFilter::getProxiedMethods( |
64 | | - $originalClass, |
65 | | - array('__get', '__set', '__isset', '__unset', '__clone', '__sleep') |
66 | | - ); |
67 | | - |
68 | | - foreach ($methods as $method) { |
69 | | - $classGenerator->addMethodFromGenerator( |
70 | | - InterceptedMethod::generateMethod( |
71 | | - new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), |
72 | | - $prefixInterceptors, |
73 | | - $suffixInterceptors |
| 66 | + array_map( |
| 67 | + function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) { |
| 68 | + ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod); |
| 69 | + }, |
| 70 | + array_merge( |
| 71 | + array_map( |
| 72 | + function (ReflectionMethod $method) use ($prefixInterceptors, $suffixInterceptors) { |
| 73 | + return InterceptedMethod::generateMethod( |
| 74 | + new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), |
| 75 | + $prefixInterceptors, |
| 76 | + $suffixInterceptors |
| 77 | + ); |
| 78 | + }, |
| 79 | + ProxiedMethodsFilter::getProxiedMethods( |
| 80 | + $originalClass, |
| 81 | + array('__get', '__set', '__isset', '__unset', '__clone', '__sleep') |
| 82 | + ) |
| 83 | + ), |
| 84 | + array( |
| 85 | + new Constructor($originalClass, $prefixInterceptors, $suffixInterceptors), |
| 86 | + new SetMethodPrefixInterceptor($prefixInterceptors), |
| 87 | + new SetMethodSuffixInterceptor($suffixInterceptors), |
| 88 | + new MagicGet($originalClass, $prefixInterceptors, $suffixInterceptors), |
| 89 | + new MagicSet($originalClass, $prefixInterceptors, $suffixInterceptors), |
| 90 | + new MagicIsset($originalClass, $prefixInterceptors, $suffixInterceptors), |
| 91 | + new MagicUnset($originalClass, $prefixInterceptors, $suffixInterceptors), |
| 92 | + new MagicSleep($originalClass, $prefixInterceptors, $suffixInterceptors), |
| 93 | + new MagicClone($originalClass, $prefixInterceptors, $suffixInterceptors), |
74 | 94 | ) |
75 | | - ); |
76 | | - } |
77 | | - |
78 | | - $classGenerator->addMethodFromGenerator( |
79 | | - new Constructor($originalClass, $prefixInterceptors, $suffixInterceptors) |
80 | | - ); |
81 | | - $classGenerator->addMethodFromGenerator(new SetMethodPrefixInterceptor($prefixInterceptors)); |
82 | | - $classGenerator->addMethodFromGenerator(new SetMethodSuffixInterceptor($suffixInterceptors)); |
83 | | - $classGenerator->addMethodFromGenerator( |
84 | | - new MagicGet($originalClass, $prefixInterceptors, $suffixInterceptors) |
85 | | - ); |
86 | | - $classGenerator->addMethodFromGenerator( |
87 | | - new MagicSet($originalClass, $prefixInterceptors, $suffixInterceptors) |
88 | | - ); |
89 | | - $classGenerator->addMethodFromGenerator( |
90 | | - new MagicIsset($originalClass, $prefixInterceptors, $suffixInterceptors) |
91 | | - ); |
92 | | - $classGenerator->addMethodFromGenerator( |
93 | | - new MagicUnset($originalClass, $prefixInterceptors, $suffixInterceptors) |
94 | | - ); |
95 | | - $classGenerator->addMethodFromGenerator( |
96 | | - new MagicSleep($originalClass, $prefixInterceptors, $suffixInterceptors) |
97 | | - ); |
98 | | - $classGenerator->addMethodFromGenerator( |
99 | | - new MagicClone($originalClass, $prefixInterceptors, $suffixInterceptors) |
| 95 | + ) |
100 | 96 | ); |
101 | 97 | } |
102 | 98 | } |
0 commit comments