/** * @test */ public function reduceTargetClassNamesFiltersAllClassesNotMatchedAByClassNameFilter() { $availableClassNames = ['TestPackage\\Subpackage\\Class1', 'TestPackage\\Class2', 'TestPackage\\Subpackage\\SubSubPackage\\Class3', 'TestPackage\\Subpackage2\\Class4']; sort($availableClassNames); $availableClassNamesIndex = new Aop\Builder\ClassNameIndex(); $availableClassNamesIndex->setClassNames($availableClassNames); $classNameFilter1 = new Pointcut\PointcutClassNameFilter('TestPackage\\Subpackage\\SubSubPackage\\Class3'); $classNameFilter2 = new Pointcut\PointcutClassNameFilter('TestPackage\\Subpackage\\Class1'); $methodNameFilter1 = new Pointcut\PointcutMethodNameFilter('method2'); $expectedClassNames = ['TestPackage\\Subpackage\\Class1', 'TestPackage\\Subpackage\\SubSubPackage\\Class3']; sort($expectedClassNames); $expectedClassNamesIndex = new Aop\Builder\ClassNameIndex(); $expectedClassNamesIndex->setClassNames($expectedClassNames); $pointcutFilterComposite = new Pointcut\PointcutFilterComposite(); $pointcutFilterComposite->addFilter('&&', $classNameFilter1); $pointcutFilterComposite->addFilter('||', $classNameFilter2); $pointcutFilterComposite->addFilter('&&', $methodNameFilter1); $result = $pointcutFilterComposite->reduceTargetClassNames($availableClassNamesIndex); $this->assertEquals($expectedClassNamesIndex, $result, 'The wrong class names have been filtered'); }
/** * This method is used to optimize the matching process. * * @param ClassNameIndex $classNameIndex * @return ClassNameIndex */ public function reduceTargetClassNames(ClassNameIndex $classNameIndex) { return $this->pointcutFilterComposite->reduceTargetClassNames($classNameIndex); }
/** * Adds runtime evaluations to the pointcut filter composite * * @param string $operator The operator * @param string $runtimeEvaluations The runtime evaluations string * @param PointcutFilterComposite $pointcutFilterComposite An instance of the pointcut filter composite. The result (ie. the custom filter) will be added to this composite object. * @return void */ protected function parseRuntimeEvaluations($operator, $runtimeEvaluations, PointcutFilterComposite $pointcutFilterComposite) { $runtimeEvaluationsDefinition = [$operator => ['evaluateConditions' => $this->getRuntimeEvaluationConditionsFromEvaluateString($runtimeEvaluations)]]; $pointcutFilterComposite->setGlobalRuntimeEvaluationsDefinition($runtimeEvaluationsDefinition); }