private function getProxyListFixtures() { $serviceReflectionClass = new ReflectionClass(FooService::class); $aspectReflectionClass = new ReflectionClass(FooAspect::class); $proxyList = new ProxyList(); $joinpoint = new Joinpoint($serviceReflectionClass->getMethod('foo')); $advice = new Advice(new BeforePointcut(new PointcutExpression('\\AOP\\Before')), new InterceptingMethod($aspectReflectionClass->getMethod('fooAdvice'))); $aspectDefinition = new ArrayServiceDefinition(array('serviceId' => 'fooService', 'class' => FooAspect::class)); $joinpointsAdvices = new Map(); $joinpointsAdvices->put($joinpoint, new ArrayList()); $joinpointsAdvices->getValue($joinpoint)->put([$advice, $aspectDefinition]); $proxyList->addProxy(new Proxy($joinpointsAdvices, new ArrayServiceDefinition(array('serviceId' => 'fooService', 'class' => '\\FooService')))); return $proxyList; }
/** * @return ProxyList */ private function getExpectedProxyList() { $reflectionClass = new ReflectionClass(FooAspect::class); $reflectionMethod = $reflectionClass->getMethod('fooAdvice'); $joinpoint = new Joinpoint($reflectionMethod); $advice = new Advice(new Pointcut($this->getPointcutExpressionFixtures()), new InterceptingMethod(new ReflectionMethod(FooAspect::class, 'fooAdvice'))); $adviceDefinition = new ArrayServiceDefinition(array('serviceId' => 'fooAspect', 'class' => FooAspect::class)); $joinpointsAdvices = new Map(); $joinpointsAdvices->put($joinpoint, new ArrayList()); $joinpointsAdvices->getValue($joinpoint)->put([$advice, $adviceDefinition]); $targetDefinition = new ArrayServiceDefinition(array('serviceId' => 'fooService', 'class' => FooService::class)); $proxyList = new ProxyList(); $proxyList->addProxy(new Proxy($joinpointsAdvices, $targetDefinition)); return $proxyList; }
private function groupByJoinpoints(IMap $advicesJoinpoints) { $groupedByJoinpoints = new Map(); foreach ($advicesJoinpoints->getKeys() as $advice) { list($joinpoints, $aspectDefinition) = $advicesJoinpoints->getValue($advice); foreach ($joinpoints as $joinpoint) { if (!$groupedByJoinpoints->exists($joinpoint)) { $groupedByJoinpoints->put($joinpoint, new ArrayList()); } /** @var ArrayList $advices */ $advices = $groupedByJoinpoints->getValue($joinpoint); $advices->put([$advice, $aspectDefinition]); } } return $groupedByJoinpoints; }