Neos\Flow\Aop\Pointcut\PointcutExpressionParser::parseDesignatorMethod PHP Method

parseDesignatorMethod() protected method

Splits the parameters of the pointcut designator "method" into a class and a method part and adds the appropriately configured filters to the filter composite object.
protected parseDesignatorMethod ( string $operator, string $signaturePattern, PointcutFilterComposite $pointcutFilterComposite ) : void
$operator string The operator
$signaturePattern string The pattern expression defining the class and method - the "signature"
$pointcutFilterComposite PointcutFilterComposite An instance of the pointcut filter composite. The result (ie. the class and method filter) will be added to this composite object.
return void
    protected function parseDesignatorMethod($operator, $signaturePattern, PointcutFilterComposite $pointcutFilterComposite)
    {
        if (strpos($signaturePattern, '->') === false) {
            throw new InvalidPointcutExpressionException('Syntax error: "->" expected in "' . $signaturePattern . '", defined in ' . $this->sourceHint, 1169027339);
        }
        $methodVisibility = $this->getVisibilityFromSignaturePattern($signaturePattern);
        list($classPattern, $methodPattern) = explode('->', $signaturePattern, 2);
        if (strpos($methodPattern, '(') === false) {
            throw new InvalidPointcutExpressionException('Syntax error: "(" expected in "' . $methodPattern . '", defined in ' . $this->sourceHint, 1169144299);
        }
        $matches = [];
        preg_match(self::PATTERN_MATCHMETHODNAMEANDARGUMENTS, $methodPattern, $matches);
        $methodNamePattern = $matches['MethodName'];
        $methodArgumentPattern = $matches['MethodArguments'];
        $methodArgumentConstraints = $this->getArgumentConstraintsFromMethodArgumentsPattern($methodArgumentPattern);
        $classNameFilter = new PointcutClassNameFilter($classPattern);
        $classNameFilter->injectReflectionService($this->reflectionService);
        $methodNameFilter = new PointcutMethodNameFilter($methodNamePattern, $methodVisibility, $methodArgumentConstraints);
        /** @var SystemLoggerInterface $systemLogger */
        $systemLogger = $this->objectManager->get(SystemLoggerInterface::class);
        $methodNameFilter->injectSystemLogger($systemLogger);
        $methodNameFilter->injectReflectionService($this->reflectionService);
        if ($operator !== '&&') {
            $subComposite = new PointcutFilterComposite();
            $subComposite->addFilter('&&', $classNameFilter);
            $subComposite->addFilter('&&', $methodNameFilter);
            $pointcutFilterComposite->addFilter($operator, $subComposite);
        } else {
            $pointcutFilterComposite->addFilter('&&', $classNameFilter);
            $pointcutFilterComposite->addFilter('&&', $methodNameFilter);
        }
    }