/** * Determines which of the given classes are potentially proxyable * and returns their names in an array. * * @param array $classNames Names of the classes to check * @return array Names of classes which can be proxied * @author Robert Lemke <*****@*****.**> */ protected function getProxyableClasses(array $classNames) { $proxyableClasses = array(); foreach ($classNames as $className) { if (!in_array(substr($className, 0, 12), $this->blacklistedSubPackages)) { if (!$this->reflectionService->isClassReflected($className)) { throw new \F3\FLOW3\AOP\Exception\UnknownClass('The class "' . $className . '" does not exist.', 1187348208); } if (!$this->reflectionService->isClassTaggedWith($className, 'aspect') && !$this->reflectionService->isClassAbstract($className) && !$this->reflectionService->isClassFinal($className) && !$this->reflectionService->isClassImplementationOf($className, 'F3\\FLOW3\\AOP\\ProxyInterface')) { $proxyableClasses[] = $className; } } } return $proxyableClasses; }