/**
  * 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;
 }