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);
}
}