/**
  * Checks if the given class and method match this pointcut.
  * Before each match run, reset() must be called to reset the circular references guard.
  *
  * @param string $className Class to check against
  * @param string $methodName Method to check against
  * @param string $methodDeclaringClassName Name of the class the method was originally declared in
  * @param mixed $pointcutQueryIdentifier Some identifier for this query - must at least differ from a previous identifier. Used for circular reference detection.
  * @return boolean TRUE if class and method match this point cut, otherwise FALSE
  * @throws F3\FLOW3\AOP\Exception\CircularPointcutReferenceException if a circular pointcut reference was detected
  * @author Robert Lemke <*****@*****.**>
  */
 public function matches($className, $methodName, $methodDeclaringClassName, $pointcutQueryIdentifier)
 {
     if ($this->pointcutQueryIdentifier === $pointcutQueryIdentifier) {
         $this->recursionLevel++;
         if ($this->recursionLevel > self::MAXIMUM_RECURSIONS) {
             throw new \F3\FLOW3\AOP\Exception\CircularPointcutReferenceException('Circular pointcut reference detected in ' . $this->aspectClassName . '->' . $this->pointcutMethodName . ', too many recursions (Query identifier: ' . $pointcutQueryIdentifier . ').', 1172416172);
         }
     } else {
         $this->pointcutQueryIdentifier = $pointcutQueryIdentifier;
         $this->recursionLevel = 0;
     }
     return $this->pointcutFilterComposite->matches($className, $methodName, $methodDeclaringClassName, $pointcutQueryIdentifier);
 }
 /**
  * Adds a setting filter to the poincut filter composite
  *
  * @param string $operator The operator
  * @param string $configurationPath The path to the settings option, that should be used
  * @param \F3\FLOW3\AOP\Pointcut\PointcutFilterComposite $pointcutFilterComposite An instance of the pointcut filter composite. The result (ie. the custom filter) will be added to this composite object.
  * @return void
  * @author Andreas Förthner <*****@*****.**>
  */
 protected function parseDesignatorSetting($operator, $configurationPath, \F3\FLOW3\AOP\Pointcut\PointcutFilterComposite $pointcutFilterComposite)
 {
     $pointcutFilterComposite->addFilter($operator, $this->objectFactory->create('F3\\FLOW3\\AOP\\Pointcut\\PointcutSettingFilter', $configurationPath));
 }
 /**
  * Walks recursively through the resources tree.
  *
  * @param string $operator The operator
  * @param string $pointcutExpression The pointcut expression (value of the designator)
  * @param \F3\FLOW3\AOP\Pointcut\PointcutFilterComposite $pointcutFilterComposite An instance of the pointcut filter composite. The result (ie. the pointcut filter) will be added to this composite object.
  * @return void
  * @throws \F3\FLOW3\AOP\Exception\InvalidPointcutExpressionException
  * @author Andreas Förthner <*****@*****.**>
  */
 protected function parseDesignatorPointcut($operator, $pointcutExpression, \F3\FLOW3\AOP\Pointcut\PointcutFilterComposite $pointcutFilterComposite, array &$trace = array())
 {
     if (!isset($this->resourcesTree[$pointcutExpression])) {
         throw new \F3\FLOW3\AOP\Exception\InvalidPointcutExpressionException('The given resource was not defined: ' . $pointcutExpression . '".', 1222014591);
     }
     $pointcutFilterComposite->addFilter($operator, $this->parse($this->resourcesTree[$pointcutExpression], $trace));
 }