public function testGetSingleForClassAddedTwice()
 {
     $this->classMultiMap->put(self::SOME_CLASS_NAME, "someValue");
     $this->classMultiMap->put(self::SOME_CLASS_NAME, "someOtherValue");
     $this->setExpectedException("Skrz\\Bundle\\AutowiringBundle\\Exception\\MultipleValuesException");
     $this->classMultiMap->getSingle(self::SOME_CLASS_NAME);
 }
 /**
  * @param ReflectionClass $reflectionClass
  * @param string $docComment
  * @param string $parameterName
  * @param ReflectionClass $parameterReflectionClass
  * @param mixed $defaultValueAvailable
  * @param mixed $defaultValue
  * @param $preferredServices
  * @return mixed
  */
 private function getValue(ReflectionClass $reflectionClass, $docComment, $parameterName, ReflectionClass $parameterReflectionClass = null, $defaultValueAvailable, $defaultValue, $preferredServices)
 {
     $className = null;
     $isArray = false;
     // resolve class name, whether value is array
     if ($parameterName !== null) {
         // parse parameter class
         if ($parameterReflectionClass) {
             $className = $parameterReflectionClass->getName();
         } elseif (preg_match("/@param\\s+([a-zA-Z0-9\\\\_]+)(\\[\\])?(\\|[^\\s]+)*\\s+\\\$" . preg_quote($parameterName) . "/", $docComment, $m)) {
             $className = $m[1];
             $isArray = isset($m[2]) && $m[2] === "[]";
         } elseif (!$defaultValueAvailable) {
             throw new AutowiringException("Could not parse parameter type - neither type hint, nor @param annotation available.");
         }
     } else {
         // parse property class
         if (preg_match("/@var\\s+([a-zA-Z0-9\\\\_]+)(\\[\\])?/", $docComment, $m)) {
             $className = $m[1];
             $isArray = isset($m[2]) && $m[2] === "[]";
         } elseif (!$defaultValueAvailable) {
             throw new AutowiringException("Could not parse property type - no @var annotation.");
         }
     }
     // resolve class name to FQN
     $lowerClassName = trim(strtolower($className), "\\ \t\n");
     $useStatements = $this->getUseStatements($reflectionClass);
     if (isset($useStatements[$lowerClassName])) {
         $className = $useStatements[$lowerClassName];
     } elseif (strpos($className, "\\") === false) {
         $className = $reflectionClass->getNamespaceName() . "\\" . $className;
     }
     $className = trim($className, "\\");
     // autowire from class map
     if ($isArray) {
         return array_map(function ($serviceId) {
             return new Reference($serviceId);
         }, $this->classMap->getMulti($className));
     } elseif ($className !== null) {
         try {
             return new Reference($this->classMap->getSingle($className));
         } catch (NoValueException $exception) {
             if ($defaultValueAvailable) {
                 return $defaultValue;
             } else {
                 throw new AutowiringException(sprintf("Missing service of type '%s'.", $className));
             }
         } catch (MultipleValuesException $exception) {
             if (isset($preferredServices[$className])) {
                 return new Reference($preferredServices[$className]);
             } else {
                 throw new AutowiringException(sprintf("Multiple services of type '%s'.", $className));
             }
         }
     } elseif ($defaultValueAvailable) {
         return $defaultValue;
     } else {
         throw new AutowiringException("Could not autowire.");
     }
 }